axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anne Thomas Manes <atma...@gmail.com>
Subject Re: Axis sends weird SOAP requests
Date Thu, 17 Feb 2005 22:15:36 GMT
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, seppe@pandora.be <seppe@telenet.be> 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
> 
>

Mime
View raw message