Problems with Web Services on JBoss 4.2.1
chui Jul 25, 2007 3:09 PMHi there!
I'm trying to run my application with JBoss AS 4.2.1, but I found some strange differences between 4.2.1 and 4.0.5 (which I was using before). It seems like JBoss 4.2.1 uses default values or default manners of naming everything!! Examples:
1-) With 4.0.5 I was using the namespace http://endpoints/jaws/ and everything was ok. But with 4.2.1, the operations' namespace comes from the package where the classes are. If I put my endpoint interfaces in a package "endpoints.jaws", I just can't call the service's methods because the operations' namespace becomes "http://jaws.endpoints". I avoided this error by changing my namespace to a simple "http://endpoints/" and putting the interfaces in the package "endpoints"... (But I'd like to know if it's possible to keep using http://endpoints/jaws, or JBoss 4.0.5 won't allow the deployment of these services anymore... =/)
2-) Well, when I changed the namespace, the webservices were available on JBossWS... and I got stuck. This is the error I receive:
2007-07-25 15:29:25,046 ERROR [org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS] SOAP request exception org.jboss.ws.WSException: Cannot find child element: arg0 at org.jboss.ws.core.CommonSOAPBinding.getParameterFromMessage(CommonSOAPBinding.java:866) at org.jboss.ws.core.CommonSOAPBinding.unbindRequestMessage(CommonSOAPBinding.java:325) at org.jboss.ws.core.server.AbstractServiceEndpointInvoker.invoke(AbstractServiceEndpointInvoker.java:187) at org.jboss.ws.core.server.ServiceEndpoint.processRequest(ServiceEndpoint.java:212) at org.jboss.ws.core.server.ServiceEndpointManager.processRequest(ServiceEndpointManager.java:448) at org.jboss.ws.core.server.AbstractServiceEndpointServlet.doPost(AbstractServiceEndpointServlet.java:114) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at org.jboss.ws.core.server.AbstractServiceEndpointServlet.service(AbstractServiceEndpointServlet.java:75) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 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.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) 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:241) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595)
As you can see, my WSDL file doesn't have this part name "arg0":
<?xml version="1.0" encoding="UTF-8"?> <definitions name='Commands' targetNamespace='http://endpoints/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://endpoints/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <types/> <message name='Commands_execute'> <part name='String_1' type='xsd:string'/> </message> <message name='Commands_executeResponse'> <part name='result' type='xsd:string'/> </message> <portType name='Commands'> <operation name='execute' parameterOrder='String_1'> <input message='tns:Commands_execute'/> <output message='tns:Commands_executeResponse'/> </operation> </portType> <binding name='CommandsBinding' type='tns:Commands'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='execute'> <soap:operation soapAction=''/> <input> <soap:body namespace='http://endpoints/' use='literal'/> </input> <output> <soap:body namespace='http://endpoints/' use='literal'/> </output> </operation> </binding> <service name='Commands'> <port binding='tns:CommandsBinding' name='CommandsPort'> <soap:address location='REPLACE_WITH_ACTUAL_URL'/> </port> </service> </definitions>
Even if I replace the String_1 occurences by arg0 I get the error above. I don't know what to do, could anyone help me please??? Why does JBoss use this values instead of the WSDL values?!
Thanks...
Chui