axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Davanum Srinivas <dava...@gmail.com>
Subject Re: WSDL SOAP headers
Date Sat, 12 Nov 2005 20:29:49 GMT
Greg,

Could you please browse the sources and look for QSWSDLHandler? that
is a pluggable mechanism for manipulating the wsdl.

thanks,
dims

On 11/11/05, Greg Adams <gadams@gmail.com> wrote:
>
>
> ---------- Forwarded message ----------
> From: Greg Adams <gadams@gmail.com>
> Date: Nov 10, 2005 4:00 PM
>  Subject: WSDL SOAP headers
> To: axis-user@ws.apache.org
>
>
>
> I'm attempting to create a Java web service with Apache Axis 1.3. One of the
> requirements of this web service is that it must maintain conversational
> state. Following the advice of an article here:
>
>
>
> http://www.oracle.com/technology/pub/articles/davydov_soa.html
>
>
>
> I implemented a JAX-RPC "Handler" to intercept incoming requests to my web
> service for an expected SOAP header. The end result of this is that the WSDL
> generated by Axis doesn't contain any mention of the SOAP header, but if
> client requests don't contain the expected headers, my service throws a SOAP
> fault...
>
>
>
> Following directions in Axis documentation, I was able to create a
> server-side handler to inspect requests for the headers and use them
> appropriately, and to create a client-side handler to inject the headers
> into the requests before they're sent to the web service, but I don't seem
> to be able to implement the same semantics in a .Net client.
>
>
>
> Here's the WSDL for the Axis service I'm trying to call:
>
> *******************************************************************************************************
>
> <wsdl:definitions targetNamespace="urn:WidgetPrice">
>
> -
>
>             <!--
>
> WSDL created by Apache Axis version: 1.3
>
> Built on Oct 05, 2005 (05:23:37 EDT)
>
> -->
>
> -
>
>             <wsdl:message name="setWidgetPriceRequest">
>
> <wsdl:part name="name" type="soapenc:string"/>
>
> <wsdl:part name="price" type="xsd:float"/>
>
> </wsdl:message>
>
> -
>
>             <wsdl:message name="getWidgetPriceResponse">
>
> <wsdl:part name="getWidgetPriceReturn" type="xsd:float"/>
>
> </wsdl:message>
>
> <wsdl:message name="setWidgetPriceResponse">
>
>
>
>    </wsdl:message>
>
> -
>
>             <wsdl:message name="getWidgetPriceRequest">
>
> <wsdl:part name="name" type="soapenc:string"/>
>
> </wsdl:message>
>
> -
>
>             <wsdl:portType name="WidgetPriceIF">
>
> -
>
>             <wsdl:operation name="setWidgetPrice" parameterOrder="name
> price">
>
> <wsdl:input message="impl:setWidgetPriceRequest"
> name="setWidgetPriceRequest"/>
>
> <wsdl:output message="impl:setWidgetPriceResponse"
> name="setWidgetPriceResponse"/>
>
> </wsdl:operation>
>
> -
>
>             <wsdl:operation name="getWidgetPrice" parameterOrder="name">
>
> <wsdl:input message="impl:getWidgetPriceRequest"
> name="getWidgetPriceRequest"/>
>
> <wsdl:output message="impl:getWidgetPriceResponse"
> name="getWidgetPriceResponse"/>
>
> </wsdl:operation>
>
> </wsdl:portType>
>
> -
>
>             <wsdl:binding name="WidgetPriceSoapBinding"
> type="impl:WidgetPriceIF">
>
> <wsdlsoap:binding style="rpc"
> transport="http://schemas.xmlsoap.org/soap/http"/>
>
> -
>
>             <wsdl:operation name="setWidgetPrice">
>
> <wsdlsoap:operation soapAction=""/>
>
> -
>
>             <wsdl:input name="setWidgetPriceRequest">
>
> <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://service" use="encoded"/>
>
> </wsdl:input>
>
> -
>
>             <wsdl:output name="setWidgetPriceResponse">
>
> <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="urn:WidgetPrice" use="encoded"/>
>
> </wsdl:output>
>
> </wsdl:operation>
>
> -
>
>             <wsdl:operation name="getWidgetPrice">
>
> <wsdlsoap:operation soapAction=""/>
>
> -
>
>             <wsdl:input name="getWidgetPriceRequest">
>
> <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://service" use="encoded"/>
>
> </wsdl:input>
>
> -
>
>             <wsdl:output name="getWidgetPriceResponse">
>
> <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="urn:WidgetPrice" use="encoded"/>
>
> </wsdl:output>
>
> </wsdl:operation>
>
> </wsdl:binding>
>
> -
>
>             <wsdl:service name="WidgetPriceIFService">
>
> -
>
>             <wsdl:port
> binding="impl:WidgetPriceSoapBinding" name="WidgetPrice">
>
> <wsdlsoap:address
> location="http://localhost:8080/WidgetPrice/services/WidgetPrice"/
> >
>
> </wsdl:port>
>
> </wsdl:service>
>
> </wsdl:definitions>
>
>
>
> *******************************************************************************************************
>
> Here's the SOAP conversation of the Java client using the Axis service:
>
> *******************************************************************************************************
>
> <!--  Request #1 -->
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <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:Header>
>
>                         <StateIdentifier
> soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
> soapenv:mustUnderstand="0">
>
>                                     <UserContextID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1234567890</UserContextID>
>
>                         </StateIdentifier>
>
>             </soapenv:Header>
>
>             <soapenv:Body>
>
>                         <ns1:setWidgetPrice
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="urn:WidgetPrice">
>
>                                     <ns1:arg0
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">WidgetX</ns1:arg0>
>
>                                     <ns1:arg1 href="#id0"
> />
>
>                         </ns1:setWidgetPrice>
>
>                         <multiRef id="id0" soapenc:root="0"
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/
> " xsi:type="soapenc:float"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">9.99</multiRef>
>
>             </soapenv:Body>
>
> </soapenv:Envelope>
>
>
>
> <!--  Response #1 -->
>
>
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <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:Header>
>
>                         <StateIdentifier
> soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
> soapenv:mustUnderstand="0">
>
>                                     <UserContextID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1234567890</UserContextID>
>
>                                     <ConvID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1131660103468</ConvID>
>
>                         </StateIdentifier>
>
>             </soapenv:Header>
>
>             <soapenv:Body>
>
>                         <ns1:setWidgetPriceResponse
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="urn:WidgetPrice" />
>
>             </soapenv:Body>
>
> </soapenv:Envelope>
>
>
>
> <!--  Request #2 -->
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <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:Header>
>
>                         <StateIdentifier
> soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
> soapenv:mustUnderstand="0">
>
>                                     <UserContextID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1234567890</UserContextID>
>
>                                     <ConvID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1131660103468</ConvID>
>
>                         </StateIdentifier>
>
>             </soapenv:Header>
>
>             <soapenv:Body>
>
>                         <ns1:getWidgetPrice
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="urn:WidgetPrice">
>
>                                     <ns1:arg0
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">WidgetX</ns1:arg0>
>
>                         </ns1:getWidgetPrice>
>
>             </soapenv:Body>
>
> </soapenv:Envelope>
>
>
>
> <!--  Response #2 -->
>
>
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <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:Header>
>
>                         <StateIdentifier
> soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"
> soapenv:mustUnderstand="0">
>
>                                     <UserContextID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1234567890</UserContextID>
>
>                                     <ConvID
> xsi:type="soapenc:string"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">1131660103562</ConvID>
>
>                         </StateIdentifier>
>
>             </soapenv:Header>
>
>             <soapenv:Body>
>
>                         <ns1:getWidgetPriceResponse
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:ns1="urn:WidgetPrice">
>
>                                     <getWidgetPriceReturn
> href="#id0" />
>
>                         </ns1:getWidgetPriceResponse>
>
>                         <multiRef id="id0" soapenc:root="0"
> soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> xsi:type="xsd:float"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> >9.99</multiRef>
>
>             </soapenv:Body>
>
> </soapenv:Envelope>
>
> *******************************************************************************************************
>
>
>
>
>
> .Net wants to generate a dynamic proxy to call the webservice from the WSDL,
> and registering a handler to add the required headers when they are not
> declared in the WSDL has been ... difficult. Is there a way to get Axis to
> include information about the required headers in the generated WSDL that
> doesn't involve hand-coding WSDL for the thousands of web services that are
> eventually going to use this mechanism?
>
>
>
> Thanks in advance for any help.
>
>
>
> Greg Adams
>
>
>
>


--
Davanum Srinivas : http://wso2.com/blogs/

Mime
View raw message