2014-01-13 2 views
1

Я хочу сделать управляемый bean-компонент jsf также веб-службой, просто добавив аннотацию @WebService выше определения класса и аннотации @WebMethod к методам управляемых beans.Как сделать jsf @ManagedBean также @WebService

Это не работает, по крайней мере, не на websphere.

Методы управляемого bean-метода делают некоторые вызовы EJB, вызывая методы инъецируемых сессионных компонентов, поэтому определение нового класса веб-сервиса и вызов методов управляемого компонента JSF из его @WebMethods также не работает.

Любые предложения?

ответ

3

Я предлагаю вам использовать подход, в котором управляемый компонент просто сохраняет состояние страницы, и что он делегирует все транзакционные вещи в EJB, поэтому вы можете выставить в качестве веб-службы не методы управляемого компонента, а EJB.

обновление: это работает для меня с TomEE + 1.6.0, это то, что вы хотите?

package somepackage; 
import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 

@ManagedBean 
@WebService 
@ViewScoped 
public class ManagedBeanAndWebService implements Serializable{ 

    private static final long serialVersionUID = 4479173603147480764L; 
    private String someAttribute="xyz"; 

    public String getSomeAttribute() { 
     return someAttribute; 
    } 

    public void setSomeAttribute(String someAttribute) { 
     this.someAttribute = someAttribute; 
    } 

    @WebMethod(operationName="methodName") 
    public void someWebMethod(String s){ 
     System.out.println(s); 
    } 
} 

и XHTML

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:pe="http://primefaces.org/ui/extensions"> 
<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Test</title> 
</h:head> 
<h:body> 

    <h:form id="form"> 
     <p:outputLabel value="#{managedBeanAndWebService.someAttribute}"/> 
    </h:form> 
</h:body> 
</html> 

и WS

enter image description here

+0

я обычно бы сделать это, но есть конкретный случай вызова внешнего приложения внутри управляемого компонента, и метод invoker также должен быть доступен через веб-службу. – fledglingCoder

Смежные вопросы