SOAPRequestHander problem on client side
duyninh Jan 12, 2009 2:25 AMI'm trying to implement a client that consumes conversational web services, following this example Accessing Seam WebServices from a standalone Client, i get the following exception :
22:54:40,670 INFO [STDOUT] handleInbound... cid = 2 22:55:11,559 INFO [STDOUT] JbpmClient:: after processMgmtService.getProcessDefinition 22:55:11,560 FATAL [application] java.lang.IllegalStateException: No active event context javax.faces.el.EvaluationException: java.lang.IllegalStateException: No active event context at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91) at javax.faces.component.UICommand.broadcast(UICommand.java:383) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296) at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253) at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:51) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:38) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Unknown Source) ...
in order to test my conversational web services i've modified the test javascript in seambay and it works with the test javascript, that means i have probably problem only on the client side.
Client :
... import com.itemis.jbpmclient.ws.SOAPRequestHandler; @Name("client") public class JbpmClient { private SOAPRequestHandler soapRequestHandler = new SOAPRequestHandler(); @Begin public void getProcessDefinition() { System.out.println("JbpmClient:: before processMgmtService.getProcessDefinition"); JbpmService processMgmtService = new JbpmService_Service().getJbpmServicePort(); BindingProvider bp = (BindingProvider)processMgmtService; ArrayList l = new ArrayList(); l.add(soapRequestHandler); bp.getBinding().setHandlerChain(l); processMgmtService.getProcessDefinition(); System.out.println("JbpmClient:: after processMgmtService.getProcessDefinition"); } public void executeProcess() { System.out.println("JbpmClient:: before processMgmtService.executeProcess"); JbpmService processMgmtService = new JbpmService_Service().getJbpmServicePort(); BindingProvider bp = (BindingProvider)processMgmtService; ArrayList l = new ArrayList(); l.add(soapRequestHandler); bp.getBinding().setHandlerChain(l); processMgmtService.executeProcess(); System.out.println("JbpmClient:: after processMgmtService.executeProcess"); } }
Web services :
@Stateless @Name("jbpmService") @WebService(name = "JbpmService", serviceName = "JbpmService") public class ProcessMgmtServiceBean implements ProcessMgmtServiceRemote { @WebMethod public String getProcessDefinition() { System.out.println("ProcessMgmtServiceBean::getProcessDefinition:: current conversation id : " + getCurrentConversation()); ProcessMgmtBean processMgmt = getProcessMgmt(); return processMgmt.uploadProcessDefinition(); } @WebMethod public String executeProcess() { System.out.println("ProcessMgmtServiceBean::executeProcess:: current conversation id : " + getCurrentConversation()); ProcessMgmtBean processMgmt = getProcessMgmt(); return processMgmt.createProcessInstance(); } private ProcessMgmtBean getProcessMgmt() { System.out.println("ProcessMgmtServiceBean::getProcessMgmt:: current conversation id : " + getCurrentConversation()); return (ProcessMgmtBean)Component.getInstance(ProcessMgmtBean.class, true); } private String getCurrentConversation() { return Conversation.instance().getId(); } }
Conversational seam component :
@Conversational @Scope(value=ScopeType.CONVERSATION) @Name("processMgmt") public class ProcessMgmtBean implements Serializable { private ProcessDefinition processDefinition; private ProcessInstance processInstance; private ContextInstance contextInstance; ... @Begin(join = true) public String uploadProcessDefinition() { //processDefinition = ProcessDefinition.parseXmlString(new String(processDefinitionFile)); System.out.println("ProcessMgmtBean::uploadProcessDefinition:: current conversation : " + getCurrentConversation()); processDefinition = ProcessDefinition.parseXmlString( "<process-definition name='AddressCleaner'>" + "<start-state name='start'>" + "<transition to='end'></transition>" + "</start-state>" + "<end-state name='end'></end-state>" + "</process-definition>" ); return "successful"; } public String createProcessInstance() { System.out.println("ProcessMgmtBean::createProcessInstance:: current conversation : " + getCurrentConversation()); processInstance = new ProcessInstance(processDefinition); rootToken = processInstance.getRootToken(); displayStatus(processInstance); return "successful"; } ... public void displayStatus(ProcessInstance instance) { String nodeName = instance.getRootToken().getNode().getName(); System.out.println("You are now in node: "+nodeName); } private String getCurrentConversation() { return Conversation.instance().getId(); } @End public void end() {} }
Thanks in advance for any hints and suggestion !!!
Nguyen Duy Ninh.