It's true that, based on the WSDL definition for the getAll Products
operation, Axis should send an empty body: <soapenv:Body/>. I would
call this a bug.

But, it's also true that this WSDL is not WS-I compliant becuase you
have multiple operations with the same wire signature (an empty body).
Systinet is able to distinguish the requests based on the SOAPAction
header, but WS-I BP requires that each operation must have a unique
wire signature. Not all SOAP engines are as forgiving as Systinet.

Anne

On Thu, 17 Feb 2005 13:18:51 +0000, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> Hi all,
> 
> I'm investigating how good/bad Axis and Systinet work together. And I think I 
> found a fault at Axis' side. When I send a request with no parameters, Axis 
> generates the following SOAP message:
> 
> POST /WholeSalerService HTTP/1.0
> Content-Type: text/xml; charset=utf-8
> Accept: application/soap+xml, application/dime, multipart/related, text/*
> User-Agent: Axis/1.2RC2
> Host: localhost:5050
> Cache-Control: no-cache
> Pragma: no-cache
> SOAPAction: "http://www.apogado.com/ws/WholeSalerService/getAllProducts";
> Content-Length: 249
> 
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><getAllProducts
>  xmlns=""/></soapenv:Body></soapenv:Envelope>
> 
> When I send this request to a Systinet Service, I get the following error 
> message from Systinet:
> 
> HTTP/1.0 500 Internal Server Error
> Date: Thu, 17 Feb 2005 20:16:22 GMT
> Server: Systinet Server for Java/5.5 (Java/1.5.0_01; Windows XP/5.1; build 
> SSJ-5.5-20041128-1204)
> SOAPAction: ""
> Content-type: text/xml;charset=UTF-8
> Connection: close
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <e:Envelope 
> xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";><e:Body><e:Fault><faultcode>e:Server</faultcode><faultstring>Unknown
>  element 
> getAllProducts</faultstring><detail><ijm:idoox-java-mapping.org.idoox.xmlrpc.MessageProcessingException
>  xmlns:e="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:ijm="urn:idoox-java-mapping"><ijm:stack-trace>org.idoox.xmlrpc.MessageProcessingException:
>  Unknown element getAllProducts
>         at 
> org.idoox.wasp.wsdl.SOAPMethodInfo$RequiredElements$Invocation.notNillElement(SOAPMethodInfo.java:1052)
>         at 
> com.systinet.wasp.server.adaptor.JavaInvoker.fillCallParamsXml(JavaInvoker.java:1144)
>         at 
> com.systinet.wasp.server.adaptor.JavaInvoker.beginInvoke(JavaInvoker.java:478)
>         at 
> com.idoox.wasp.server.adaptor.JavaAdaptorImpl.beginInvoke(JavaAdaptorImpl.java:63)
>         at 
> com.idoox.wasp.server.AdaptorTemplate.javaInvocation(AdaptorTemplate.java:510)
>         at 
> com.idoox.wasp.server.AdaptorTemplate.doDispatch(AdaptorTemplate.java:395)
>         at 
> com.idoox.wasp.server.AdaptorTemplate.dispatch(AdaptorTemplate.java:328)
>         at 
> com.idoox.wasp.server.ServiceConnector.dispatch(ServiceConnector.java:378)
>         at 
> com.systinet.wasp.ServiceManagerImpl.dispatchRequest(ServiceManagerImpl.java:625)
>         at 
> com.systinet.wasp.ServiceManagerImpl.dispatch(ServiceManagerImpl.java:461)
>         at 
> com.systinet.wasp.ServiceManagerImpl$DispatcherConnHandler.handlePost(ServiceManagerImpl.java:2525)
>         at 
> com.idoox.transport.http.server.Jetty$WaspHttpHandler.handle(Jetty.java:97)
>         at com.mortbay.HTTP.HandlerContext.handle(HandlerContext.java:1087)
>         at com.mortbay.HTTP.HttpServer.service(HttpServer.java:675)
>         at com.mortbay.HTTP.HttpConnection.service(HttpConnection.java:457)
>         at com.mortbay.HTTP.HttpConnection.handle(HttpConnection.java:317)
>         at 
> com.mortbay.HTTP.SocketListener.handleConnection(SocketListener.java:99)
>         at com.mortbay.Util.ThreadedServer.handle(ThreadedServer.java:254)
>         at 
> com.mortbay.Util.ThreadPool$PoolThreadRunnable.run(ThreadPool.java:607)
>         at java.lang.Thread.run(Thread.java:595)
> </ijm:stack-trace></ijm:idoox-java-mapping.org.idoox.xmlrpc.MessageProcessingException></detail></e:Fault></e:Body></e:Envelope>
> 
> This is the SOAP message that SHOULD be sended by Axis:
> 
> POST /WholeSalerService HTTP/1.1
> Content-Length: 144
> Content-Type: text/xml; charset="utf-8"
> SOAPAction: http://www.apogado.com/ws/WholeSalerService/getAllProducts
> User-Agent: Jakarta Commons-HttpClient/2.0.1
> Host: localhost:5050
> Expect: 100-continue
> 
> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";>
>     <SOAP-ENV:Header/>
>     <SOAP-ENV:Body/>
> </SOAP-ENV:Envelope>
> 
> When I send the SOAP message manually (with some SOAP debug tool), then I get 
> the right response, and not the error I get when I send the generated SOAP 
> message with Axis.
> 
> Here is my WSDL file, I think it's correct .. if not so, please let me know:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions  name="WholeSalerService"
>     targetNamespace="http://www.apogado.com/ws/WholeSalerService.wsdl";
>     xmlns:tns="http://www.apogado.com/ws/WholeSalerService.wsdl";
>     xmlns:xsd1="http://www.apogado.com/ws/WholeSalerService.xsd";
>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
> 
>     <wsdl:types>
>         <xsd:schema 
> targetNamespace="http://www.apogado.com/ws/WholeSalerService.xsd";
>             elementFormDefault="qualified">
> 
>             <xsd:element name="Address" >
>                 <xsd:complexType>
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="type" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="street" type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="number" type="xsd:int"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="zip" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="city" 
> type="xsd:string"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Customer" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="name" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:Address"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="telephone" type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="vtaNr" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="password" type="xsd:string"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Customers" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:Customer"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Category" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="name" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="description" type="xsd:string"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Categories" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:Category"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Product" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="name" 
> type="xsd:string"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="price" 
> type="xsd:double"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" name="stock" 
> type="xsd:int"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> ref="xsd1:Category" />
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Products" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:Product"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="OrderLine">
>                 <xsd:complexType>
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> ref="xsd1:Product" />
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> name="amount" type="xsd:int" />
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Order" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:OrderLine"/>
>                         <xsd:element maxOccurs="1" minOccurs="1" 
> ref="xsd1:Customer" />
>                         <xsd:element maxOccurs="1" minOccurs="1" name="date" 
> type="xsd:date" />
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="Orders" >
>                 <xsd:complexType >
>                     <xsd:sequence>
>                         <xsd:element maxOccurs="unbounded" minOccurs="1" 
> ref="xsd1:Order"/>
>                     </xsd:sequence>
>                 </xsd:complexType>
>             </xsd:element>
> 
>             <xsd:element name="created" type="xsd:boolean" />
> 
>         </xsd:schema>
>     </wsdl:types>
> 
>     <wsdl:message name="createCustomerRequest">
>         <wsdl:part name="CustomerPart" element="xsd1:Customer"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createCustomerResponse">
>         <wsdl:part name="created" element="xsd1:created"/>
>     </wsdl:message>
> 
>     <wsdl:message name="getAllCustomersRequest"/>
> 
>     <wsdl:message name="getAllCustomersResponse">
>         <wsdl:part name="customerSeq" element="xsd1:Customers"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createProductRequest">
>         <wsdl:part name="ProductPart" element="xsd1:Product"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createProductResponse">
>         <wsdl:part name="created" element="xsd1:created"/>
>     </wsdl:message>
> 
>     <wsdl:message name="getAllProductsRequest" />
> 
>     <wsdl:message name="getAllProductsResponse">
>         <wsdl:part name="productSeq" element="xsd1:Products"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createCategoryRequest">
>         <wsdl:part name="CategoryPart" element="xsd1:Category"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createCategoryResponse">
>         <wsdl:part name="created" element="xsd1:created"/>
>     </wsdl:message>
> 
>     <wsdl:message name="getAllCategoriesRequest" />
> 
>     <wsdl:message name="getAllCategoriesResponse">
>         <wsdl:part name="categorieSeq" element="xsd1:Categories"/>
>    </wsdl:message>
> 
>     <wsdl:message name="createOrderRequest">
>         <wsdl:part name="OrderPart" element="xsd1:Order"/>
>     </wsdl:message>
> 
>     <wsdl:message name="createOrderResponse">
>         <wsdl:part name="created" element="xsd1:created"/>
>     </wsdl:message>
> 
>     <wsdl:message name="getAllOrdersRequest" />
> 
>     <wsdl:message name="getAllOrdersResponse">
>         <wsdl:part name="orderSeq" element="xsd1:Orders"/>
>     </wsdl:message>
> 
>     <wsdl:portType name="WholeSalerPort">
> 
>         <wsdl:operation name="createCustomer">
>             <wsdl:input message="tns:createCustomerRequest"/>
>             <wsdl:output message="tns:createCustomerResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllCustomers">
>             <wsdl:input message="tns:getAllCustomersRequest"/>
>             <wsdl:output message="tns:getAllCustomersResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createProduct">
>             <wsdl:input message="tns:createProductRequest"/>
>             <wsdl:output message="tns:createProductResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllProducts">
>             <wsdl:input message="tns:getAllProductsRequest"/>
>             <wsdl:output message="tns:getAllProductsResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createCategory">
>             <wsdl:input message="tns:createCategoryRequest"/>
>             <wsdl:output message="tns:createCategoryResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllCategories">
>             <wsdl:input message="tns:getAllCategoriesRequest"/>
>             <wsdl:output message="tns:getAllCategoriesResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createOrder">
>             <wsdl:input message="tns:createOrderRequest"/>
>             <wsdl:output message="tns:createOrderResponse"/>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllOrders">
>             <wsdl:input message="tns:getAllOrdersRequest"/>
>             <wsdl:output message="tns:getAllOrdersResponse"/>
>         </wsdl:operation>
> 
>     </wsdl:portType>
> 
>     <wsdl:binding name="WholeSalerBinding" type="tns:WholeSalerPort">
>         <soap:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http"/>
> 
>         <wsdl:operation name="createCustomer">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/createCustomer"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllCustomers">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/getAllCustomers"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createProduct">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/createProduct"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllProducts">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/getAllProducts"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createCategory">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/createCategory"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllCategories">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/getAllCategories"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="createOrder">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/createOrder"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>         <wsdl:operation name="getAllOrders">
>             <soap:operation
>                 
> soapAction="http://www.apogado.com/ws/WholeSalerService/getAllOrders"/>
>             <wsdl:input>
>                 <soap:body use="literal"/>
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body use="literal"/>
>             </wsdl:output>
>         </wsdl:operation>
> 
>     </wsdl:binding>
>     <wsdl:service name="WholeSalerService">
>         <wsdl:port binding="tns:WholeSalerBinding" name="WholeSalerService">
>             <soap:address location="http://localhost:6060/WholeSalerService"/>
>         </wsdl:port>
>     </wsdl:service>
> </wsdl:definitions>
> 
> Can anyone confirm that this is an Axis 'bug'? If not so, what am I doing 
> wrong? Can anyone help me?
> 
> Thanks in advance for your answer(s)
> 
> Greetings
> 
> Seppe Van Sande
> 
>

Reply via email to