2 Replies Latest reply on Jul 25, 2007 9:40 PM by Mauricio Chui

    Problems with Web Services on JBoss 4.2.1

    Mauricio Chui Newbie

      Hi 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