You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Sueveges Gyoergy <ge...@etixpert.com> on 2006/02/14 17:38:01 UTC

Simplesession, soap header not appeared in the generated wsdl

Hi all,

  I'm now testing how axis works. I need a session based web service, so I  
test the SimpleSessionHandler.
On the API site it is written, that it will check if there is a header  
with session_id, and when there is not, then is creates a session. So I  
would except that in the generated wsdl  
(http://localhost:8085/axis/services/ZagreusService?wsdl) there is a soap  
header info in the bining section. So now how will the WSDL2Java know how  
to create such a client that creates soap header with sessionid when  
sending request? Do I imagine the things in wrong way?
Or Is it not a suggested way to create wsdl from the server classes, and  
then to create the client from wsdl?

I deployed my test Servie on the server side with the following wsdd:


<deployment xmlns="http://xml.apache.org/axis/wsdd/"
             xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="ZagreusService" provider="java:RPC">
  <requestFlow>
    <handler name="soapMonitor"
	type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
    <handler name="sessionHandler"
    type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
   </requestFlow>
   <responseFlow>
      <handler name="responsesessionHandler"
type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
        <handler name="responsesoapMonitor"
      type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
   </responseFlow>
   <parameter name="className"  
value="com.etixpert.zagreus.server.axis.TestService"/>
   <parameter name="allowedMethods" value="*"/>
  </service>

</deployment>

I have the following TestService:

   package com.etixpert.zagreus.server.axis;

   import org.apache.axis.transport.http.*;
   import org.apache.axis.handlers.SimpleSessionHandler;
   import org.apache.axis.session.*;
   import org.apache.axis.*;
   import java.util.*;


   public class TestService {

	public String test(String param) {	
		MessageContext context = MessageContext.getCurrentContext();
		Session session = context.getSession();

		......

	}

	public void login(String user, String password) throws AxisFault {
		....

	}
  }

Generated wsdl. where there is no header info:

  <?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://localhost:8085/axis/services/ZagreusService"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://localhost:8085/axis/services/ZagreusService"
xmlns:intf="http://localhost:8085/axis/services/ZagreusService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.3
Built on Oct 05, 2005 (05:23:37 EDT)-->

    <wsdl:message name="loginResponse">

    </wsdl:message>

    <wsdl:message name="testResponse">

       <wsdl:part name="testReturn" type="soapenc:string"/>

    </wsdl:message>

    <wsdl:message name="loginRequest">

       <wsdl:part name="user" type="soapenc:string"/>

       <wsdl:part name="password" type="soapenc:string"/>

    </wsdl:message>

    <wsdl:message name="testRequest">

       <wsdl:part name="param" type="soapenc:string"/>

    </wsdl:message>

    <wsdl:portType name="TestService">

       <wsdl:operation name="test" parameterOrder="param">

          <wsdl:input message="impl:testRequest" name="testRequest"/>

          <wsdl:output message="impl:testResponse" name="testResponse"/>

       </wsdl:operation>

       <wsdl:operation name="login" parameterOrder="user password">

          <wsdl:input message="impl:loginRequest" name="loginRequest"/>

          <wsdl:output message="impl:loginResponse" name="loginResponse"/>

       </wsdl:operation>

    </wsdl:portType>

    <wsdl:binding name="ZagreusServiceSoapBinding" type="impl:TestService">

       <wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>

       <wsdl:operation name="test">

          <wsdlsoap:operation soapAction=""/>

          <wsdl:input name="testRequest">

             <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>

          </wsdl:input>

          <wsdl:output name="testResponse">

             <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8085/axis/services/ZagreusService"  
use="encoded"/>

          </wsdl:output>

       </wsdl:operation>

       <wsdl:operation name="login">

          <wsdlsoap:operation soapAction=""/>

          <wsdl:input name="loginRequest">

             <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>

          </wsdl:input>

          <wsdl:output name="loginResponse">

             <wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8085/axis/services/ZagreusService"  
use="encoded"/>

          </wsdl:output>

       </wsdl:operation>

    </wsdl:binding>

    <wsdl:service name="TestServiceService">

       <wsdl:port binding="impl:ZagreusServiceSoapBinding"  
name="ZagreusService">

          <wsdlsoap:address
location="http://localhost:8085/axis/services/ZagreusService"/>

       </wsdl:port>

    </wsdl:service>

</wsdl:definitions>


Thnx for the help
  George


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/

Re: Simplesession, soap header not appeared in the generated wsdl

Posted by Sueveges Gyoergy <ge...@etixpert.com>.
Hi

  Thanx for the answers.
Now I use the possibility of the http session, cookies, and it works (also  
with axis-generated source). (Some parts have to be done till tomorrow,   
so it is ok now) But in the future I will consider your suggests (session  
handling of my own with uuid,..), because maybe we will use other than  
http as transport layer.

Cheers,
  George



On Wed, 15 Feb 2006 09:18:48 -0200, robert <ro...@gmail.com>  
wrote:

> For an alternative, as simple as it seems what I often employ is just
> generating an id myself using the uuid standard (java.util.uuid or
> commons-id) and passing that back after login. Or you can do something
> similar with an ejb stateful session bean. So I just have a wsdl  
> template I
> use just about everywhere via 'extension base'  .
>
> Axis2 also does generate an uuid which is sent in the soap message via
> ws-addressing. I still typically just handle it myself due to a wide  
> range of
> integration issues and legacy support - though I am watching the
> ws-addressing standard as it evolves and all the soap engines support it.
>
> HTH,
> Robert
> http://www.braziloutsource.com/
>
> Em Quarta 15 Fevereiro 2006 07:02, o Richard Gregory escreveu:
>> Hi George,
>>
>> Unfortuntely, axis does not include the SimpleSessionHandler details in
>> the wsdl it generates, or any header details as far as I know.
>> Similarly, if you write the wsdl yourself  (see the example wsdl below,
>> with the relevant parts highlighted in *bold*) to include the required
>> information, axis will not include it in any of the files created on the
>> client side, although it will be incoprporated by any .Net clients
>> genreated from the wsdl (so if your services will be used by .Net
>> clients it is worth doing). For axis clients, the only option is to
>> include <documentation/> elements in a hand written wsdl to state that
>> the SimpleSessionHandler is needed on the client side.
>>
>> Cheers,
>>
>> Richard.
>>
>> <wsdl:definitions  
>> targetNamespace="urn:wsdl.quickquery.ws.biors.biomax.de"
>>     xmlns="http://schemas.xmlsoap.org/wsdl/"
>>     xmlns:apachesoap="http://xml.apache.org/xml-soap"
>>     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>     *xmlns:sess="http://xml.apache.org/axis/session"*
>>     xmlns:tns="urn:wsdl.quickquery.ws.biors.biomax.de"
>>     xmlns:types="urn:quickquery.ws.biors.biomax.de">
>>
>> 	<wsdl:documentation>Web Service providing the ability to query a BioRS
>> server with a simple text query. Clients invoking the service specify a
>> simple text query with one or more search terms linked with "AND"/"OR"  
>> (or
>> "&amp;"/"|") operators, which will be evaluated against the BioRS  
>> server's
>> AllText index (or indices). The result format to be returned and the  
>> list
>> of databanks to be searched  must be provided as parameters, and also
>> optionally, a specific list of elements to be returned (only applicable  
>> to
>> the ELEMENTS and XML_ELEMENTS result formats). Clients with their own
>> username/password for the BioRS server may provide these parameters, or  
>> if
>> these a provided as null a default &quot;guest&quot; username is used. A
>> session is maintained between the client and service via SOAP Header
>> session IDs, and each invocation of an operation of the service returns  
>> a
>> successive entry from the set of entries matching the given query, or a
>> message indicating that no entries matched the query. Each entry is
>> returned with the number of the entry and the total number of entries
>> matching the query, enabling clients to determine when all entries have
>> been returned. In order to make use of the SOAP header session IDs,  
>> Apache
>> Axis clients need only to include the
>> org.apache.axis.handlers.SimpleSessionHandler in the request and  
>> response
>> flows of the client. Clients based on proxy classes generated by  
>> Microsoft
>> Visual Studio from this WSDL will have the code required to use the
>> sessions in the proxy. </wsdl:documentation>
>>
>> 	<wsdl:types>
>>
>> 		*<!-- SOAP Header Session ID -->
>>
>> 		<schema targetNamespace="http://xml.apache.org/axis/session"
>> xmlns="http://www.w3.org/2001/XMLSchema"> <simpleType name="sessID">
>> 				<restriction base="xsd:long"/>
>> 			</simpleType>
>> 			<element name="sessionID" type="sess:sessID"/>
>> 		</schema>*
>>
>> 		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> xmlns="urn:quickquery.ws.biors.biomax.de"
>> targetNamespace="urn:quickquery.ws.biors.biomax.de">
>>
>> 			<!-- Input message elements -->
>>
>> 			<xsd:simpleType name="formatType">
>> 				<wsdl:documentation>
>> 					Enumeration type giving the possible data formats in which entries  
>> can
>> be retrieved from the BioRS server. FASTA - FASTA format.
>> 					ENTRY - Complete entries in source formatting.
>> 					XML_ENTRY - Complete entry in BioRS internal XML markup.
>> 					XML_ELEMENTS - Entry separated into BioRS elements, formatted in  
>> BioRS
>> internal XML. ELEMENTS - Entry separated into BioRS elements, no  
>> additional
>> formatting. </wsdl:documentation>
>> 				<xsd:restriction base="xsd:string">
>> 					<xsd:enumeration value="FASTA"/>
>> 					<xsd:enumeration value="ENTRY"/>
>> 					<xsd:enumeration value="XML_ENTRY"/>
>> 					<xsd:enumeration value="XML_ELEMENTS"/>
>> 					<xsd:enumeration value="ELEMENTS"/>
>> 				</xsd:restriction>
>> 			</xsd:simpleType>
>>
>> 			<xsd:complexType name="databanksType">
>> 				<wsdl:documentation>
>> 					The databanksType contains a list of the names of the databanks
>> against which the given query should be executed. </wsdl:documentation>
>> 				<xsd:sequence>
>> 					<xsd:element name="databankName" type="xsd:string" minOccurs="1"
>> maxOccurs="999"/> </xsd:sequence>
>> 			</xsd:complexType>
>>
>> 			<xsd:complexType name="requiredElementsType">
>> 				<wsdl:documentation>
>> 					The requiredElementsType contains a list of the names of the  
>> elements
>> required when ELEMENTS or XML_ELEMENTS formatType are specified, and  
>> only a
>> subset of all elements are required. For other result formats, or when  
>> all
>> elements are required null can be provided for this parameter.
>> </wsdl:documentation>
>> 				<xsd:sequence>
>> 					<xsd:element name="elementName" type="xsd:string" minOccurs="1"
>> maxOccurs="999"/> </xsd:sequence>
>> 			</xsd:complexType>
>>
>> 			<!-- Return message elements -->
>>
>> 			<xsd:complexType name="returnedElementsType">
>> 				<wsdl:documentation>
>> 					The returnedElementsType type represents a collection ofl BioRS
>> elements returned by a query. Each instance of this type consists of  
>> one or
>> more instance of elementType, each representing an individual element.
>> </wsdl:documentation>
>> 				<xsd:sequence>
>> 					<xsd:element name="element" type="elementType" minOccurs="1"
>> maxOccurs="999"/> </xsd:sequence>
>> 			</xsd:complexType>
>>
>> 			<xsd:complexType name="elementType">
>> 				<wsdl:documentation>
>> 					The elementType type represents an individual BioRS element  
>> returned
>> by a query. Each instance of this type contains the name of the element  
>> and
>> the element content. </wsdl:documentation>
>> 				<xsd:sequence>
>> 					<xsd:element name="elementName" type="xsd:string" minOccurs="1"
>> maxOccurs="1"/> <xsd:element name="elementContent" type="xsd:string"
>> minOccurs="1" maxOccurs="1"/> </xsd:sequence>
>> 			</xsd:complexType>
>>
>> 			<xsd:element name="result">
>> 				<wsdl:documentation>
>> 					The result type contains a single result returned by a BioRS query.
>> Each results consists of the total number of results for the query, the
>> numer of this result, the databank the result is from and either a  
>> complete
>> result in the specified format, a collection of elements, if the  
>> ELEMENTS
>> result format was specified, or a message indicating that no results
>> matched the given query. </wsdl:documentation>
>> 				<xsd:complexType>
>> 					<xsd:sequence>
>> 						<xsd:element name="resultNumber" type="xsd:int" minOccurs="0"
>> maxOccurs="1"/> <xsd:element name="totalResults" type="xsd:int"
>> minOccurs="1" maxOccurs="1"/> <xsd:element name="databank"
>> type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:choice>
>> 							<xsd:element name="entry" type="xsd:string"/>
>> 							<xsd:element name="returnedElements"  
>> type="returnedElementsType"/>
>> 							<xsd:element name="noMatchesMessage" type="xsd:string"/>
>> 						</xsd:choice>
>> 					</xsd:sequence>
>> 				</xsd:complexType>
>> 			</xsd:element>
>>
>> 			<!-- Methods signatures -->
>>
>> 			<xsd:element name="getBiorsEntry">
>> 				<wsdl:documentation>
>> 					Required parameters:
>> 					username - username to be used to connect to the BioRS server used  
>> by
>> the service. password - password matching the username provided.
>> 					queryString - the query in BioRS query language.
>> 					databanks - an instance of type databanksType contianing the names  
>> of
>> the databanks against which the uery should be executed. returnFormat -  
>> the
>> format in which results should be returned (FASTA, ENTRY, XML_ENTRY,
>> ELEMENTS, XML_ELEMENTS). requiredElements - an instance of type
>> requiredElementsType containing the names of the elements to be returned
>> (or null). If you do not have a username/password, set these as null to
>> login as a guest. </wsdl:documentation>
>> 				<xsd:complexType>
>> 					<xsd:sequence>
>> 						<xsd:element name="username" type="xsd:string" nillable="true"
>> maxOccurs="1"/> <xsd:element name="password" type="xsd:string"
>> nillable="true" maxOccurs="1"/> <xsd:element name="queryString"
>> type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element
>> name="databanks" type="databanksType" minOccurs="1" maxOccurs="1"/>
>> <xsd:element name="returnFormat" type="formatType" minOccurs="1"
>> maxOccurs="1"/> <xsd:element name="requiredElements"
>> type="requiredElementsType" minOccurs="0" maxOccurs="1"/>  
>> </xsd:sequence>
>> 				</xsd:complexType>
>> 			</xsd:element>
>>
>> 			<xsd:element name="getBiorsEntryResponse">
>> 				<xsd:complexType>
>> 					<xsd:sequence>
>> 						<xsd:element ref="result"/>
>> 					</xsd:sequence>
>> 				</xsd:complexType>
>> 			</xsd:element>
>>
>> 		</xsd:schema>
>> 	</wsdl:types>
>>
>> 	*<message name="soapHeader">
>> 		<part name="sessID" element="sess:sessionID" />
>> 	</message> *
>>
>> 	<message name="getBiorsEntryReq">
>> 		<part name="parameters" element="types:getBiorsEntry"/>
>> 	</message>
>> 	<message name="getBiorsEntryResp">
>> 		<part name="parameters" element="types:getBiorsEntryResponse"/>
>> 	</message>
>>
>> 	<portType name="BiorsQuickQueryPortType">
>> 		<operation name="getBiorsEntry">
>> 			<input message="tns:getBiorsEntryReq"/>
>> 			<output message="tns:getBiorsEntryResp"/>
>> 		</operation>
>> 	</portType>
>>
>> 	<wsdl:binding name="BiorsQuickQuerySOAPBinding"
>> type="tns:BiorsQuickQueryPortType"> <soap:binding style="document"
>> transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation
>> name="getBiorsEntry">
>> 			<soap:operation soapAction="getBiorsEntry" style="document"/>
>> 			<wsdl:input>
>> 				*<soap:header message="tns:soapHeader" part="sessID"  
>> use="literal"/>*
>> 				<soap:body use="literal"/>
>> 			</wsdl:input>
>> 			<wsdl:output>
>> 				*<soap:header message="tns:soapHeader" part="sessID"  
>> use="literal"/>*
>> 				<soap:body use="literal"/>
>> 			</wsdl:output>
>> 		</wsdl:operation>
>> 	</wsdl:binding>
>>
>> 	<service name="BiorsQuickQueryService">
>> 		<port name="BiorsQuickQuery" binding="tns:BiorsQuickQuerySOAPBinding">
>> 			<soap:address
>> location="http://146.107.217.111:8081/biors/services/BiorsQuickQuery"/>
>> </port>
>> 	</service>
>> </wsdl:definitions>
>>
>> Sueveges Gyoergy wrote:
>> > Hi all,
>> >
>> >  I'm now testing how axis works. I need a session based web service,
>> > so I  test the SimpleSessionHandler.
>> > On the API site it is written, that it will check if there is a
>> > header  with session_id, and when there is not, then is creates a
>> > session. So I  would except that in the generated wsdl
>> > (http://localhost:8085/axis/services/ZagreusService?wsdl) there is a
>> > soap  header info in the bining section. So now how will the WSDL2Java
>> > know how  to create such a client that creates soap header with
>> > sessionid when  sending request? Do I imagine the things in wrong way?
>> > Or Is it not a suggested way to create wsdl from the server classes,
>> > and  then to create the client from wsdl?
>> >
>> > I deployed my test Servie on the server side with the following wsdd:
>> >
>> >
>> > <deployment xmlns="http://xml.apache.org/axis/wsdd/"
>> >              
>> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
>> >
>> > <service name="ZagreusService" provider="java:RPC">
>> >  <requestFlow>
>> >    <handler name="soapMonitor"
>> >     type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
>> >    <handler name="sessionHandler"
>> >    type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
>> >   </requestFlow>
>> >   <responseFlow>
>> >      <handler name="responsesessionHandler"
>> > type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
>> >        <handler name="responsesoapMonitor"
>> >      type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
>> >   </responseFlow>
>> >   <parameter name="className"
>> > value="com.etixpert.zagreus.server.axis.TestService"/>
>> >   <parameter name="allowedMethods" value="*"/>
>> >  </service>
>> >
>> > </deployment>
>> >
>> > I have the following TestService:
>> >
>> >   package com.etixpert.zagreus.server.axis;
>> >
>> >   import org.apache.axis.transport.http.*;
>> >   import org.apache.axis.handlers.SimpleSessionHandler;
>> >   import org.apache.axis.session.*;
>> >   import org.apache.axis.*;
>> >   import java.util.*;
>> >
>> >
>> >   public class TestService {
>> >
>> >     public String test(String param) {
>> >         MessageContext context = MessageContext.getCurrentContext();
>> >         Session session = context.getSession();
>> >
>> >         ......
>> >
>> >     }
>> >
>> >     public void login(String user, String password) throws AxisFault {
>> >         ....
>> >
>> >     }
>> >  }
>> >
>> > Generated wsdl. where there is no header info:
>> >
>> >  <?xml version="1.0" encoding="UTF-8"?>
>> > <wsdl:definitions
>> > targetNamespace="http://localhost:8085/axis/services/ZagreusService"
>> > xmlns:apachesoap="http://xml.apache.org/xml-soap"
>> > xmlns:impl="http://localhost:8085/axis/services/ZagreusService"
>> > xmlns:intf="http://localhost:8085/axis/services/ZagreusService"
>> > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>> > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>> > xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
>> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>> > <!--WSDL created by Apache Axis version: 1.3
>> > Built on Oct 05, 2005 (05:23:37 EDT)-->
>> >
>> >    <wsdl:message name="loginResponse">
>> >
>> >    </wsdl:message>
>> >
>> >    <wsdl:message name="testResponse">
>> >
>> >       <wsdl:part name="testReturn" type="soapenc:string"/>
>> >
>> >    </wsdl:message>
>> >
>> >    <wsdl:message name="loginRequest">
>> >
>> >       <wsdl:part name="user" type="soapenc:string"/>
>> >
>> >       <wsdl:part name="password" type="soapenc:string"/>
>> >
>> >    </wsdl:message>
>> >
>> >    <wsdl:message name="testRequest">
>> >
>> >       <wsdl:part name="param" type="soapenc:string"/>
>> >
>> >    </wsdl:message>
>> >
>> >    <wsdl:portType name="TestService">
>> >
>> >       <wsdl:operation name="test" parameterOrder="param">
>> >
>> >          <wsdl:input message="impl:testRequest" name="testRequest"/>
>> >
>> >          <wsdl:output message="impl:testResponse"  
>> name="testResponse"/>
>> >
>> >       </wsdl:operation>
>> >
>> >       <wsdl:operation name="login" parameterOrder="user password">
>> >
>> >          <wsdl:input message="impl:loginRequest" name="loginRequest"/>
>> >
>> >          <wsdl:output message="impl:loginResponse"  
>> name="loginResponse"/>
>> >
>> >       </wsdl:operation>
>> >
>> >    </wsdl:portType>
>> >
>> >    <wsdl:binding name="ZagreusServiceSoapBinding"
>> > type="impl:TestService">
>> >
>> >       <wsdlsoap:binding style="rpc"
>> > transport="http://schemas.xmlsoap.org/soap/http"/>
>> >
>> >       <wsdl:operation name="test">
>> >
>> >          <wsdlsoap:operation soapAction=""/>
>> >
>> >          <wsdl:input name="testRequest">
>> >
>> >             <wsdlsoap:body
>> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
>> >
>> >          </wsdl:input>
>> >
>> >          <wsdl:output name="testResponse">
>> >
>> >             <wsdlsoap:body
>> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > namespace="http://localhost:8085/axis/services/ZagreusService"
>> > use="encoded"/>
>> >
>> >          </wsdl:output>
>> >
>> >       </wsdl:operation>
>> >
>> >       <wsdl:operation name="login">
>> >
>> >          <wsdlsoap:operation soapAction=""/>
>> >
>> >          <wsdl:input name="loginRequest">
>> >
>> >             <wsdlsoap:body
>> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
>> >
>> >          </wsdl:input>
>> >
>> >          <wsdl:output name="loginResponse">
>> >
>> >             <wsdlsoap:body
>> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>> > namespace="http://localhost:8085/axis/services/ZagreusService"
>> > use="encoded"/>
>> >
>> >          </wsdl:output>
>> >
>> >       </wsdl:operation>
>> >
>> >    </wsdl:binding>
>> >
>> >    <wsdl:service name="TestServiceService">
>> >
>> >       <wsdl:port binding="impl:ZagreusServiceSoapBinding"
>> > name="ZagreusService">
>> >
>> >          <wsdlsoap:address
>> > location="http://localhost:8085/axis/services/ZagreusService"/>
>> >
>> >       </wsdl:port>
>> >
>> >    </wsdl:service>
>> >
>> > </wsdl:definitions>
>> >
>> >
>> > Thnx for the help
>> >  George
>



-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/

Re: Simplesession, soap header not appeared in the generated wsdl

Posted by robert <ro...@gmail.com>.
For an alternative, as simple as it seems what I often employ is just 
generating an id myself using the uuid standard (java.util.uuid or 
commons-id) and passing that back after login. Or you can do something 
similar with an ejb stateful session bean. So I just have a wsdl template I 
use just about everywhere via 'extension base'  . 

Axis2 also does generate an uuid which is sent in the soap message via 
ws-addressing. I still typically just handle it myself due to a wide range of 
integration issues and legacy support - though I am watching the 
ws-addressing standard as it evolves and all the soap engines support it. 

HTH,
Robert 
http://www.braziloutsource.com/

Em Quarta 15 Fevereiro 2006 07:02, o Richard Gregory escreveu:
> Hi George,
>
> Unfortuntely, axis does not include the SimpleSessionHandler details in
> the wsdl it generates, or any header details as far as I know.
> Similarly, if you write the wsdl yourself  (see the example wsdl below,
> with the relevant parts highlighted in *bold*) to include the required
> information, axis will not include it in any of the files created on the
> client side, although it will be incoprporated by any .Net clients
> genreated from the wsdl (so if your services will be used by .Net
> clients it is worth doing). For axis clients, the only option is to
> include <documentation/> elements in a hand written wsdl to state that
> the SimpleSessionHandler is needed on the client side.
>
> Cheers,
>
> Richard.
>
> <wsdl:definitions targetNamespace="urn:wsdl.quickquery.ws.biors.biomax.de"
>     xmlns="http://schemas.xmlsoap.org/wsdl/"
>     xmlns:apachesoap="http://xml.apache.org/xml-soap"
>     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>     *xmlns:sess="http://xml.apache.org/axis/session"*
>     xmlns:tns="urn:wsdl.quickquery.ws.biors.biomax.de"
>     xmlns:types="urn:quickquery.ws.biors.biomax.de">
>
> 	<wsdl:documentation>Web Service providing the ability to query a BioRS
> server with a simple text query. Clients invoking the service specify a
> simple text query with one or more search terms linked with "AND"/"OR" (or
> "&amp;"/"|") operators, which will be evaluated against the BioRS server's
> AllText index (or indices). The result format to be returned and the list
> of databanks to be searched  must be provided as parameters, and also
> optionally, a specific list of elements to be returned (only applicable to
> the ELEMENTS and XML_ELEMENTS result formats). Clients with their own
> username/password for the BioRS server may provide these parameters, or if
> these a provided as null a default &quot;guest&quot; username is used. A
> session is maintained between the client and service via SOAP Header
> session IDs, and each invocation of an operation of the service returns a
> successive entry from the set of entries matching the given query, or a
> message indicating that no entries matched the query. Each entry is
> returned with the number of the entry and the total number of entries
> matching the query, enabling clients to determine when all entries have
> been returned. In order to make use of the SOAP header session IDs, Apache
> Axis clients need only to include the
> org.apache.axis.handlers.SimpleSessionHandler in the request and response
> flows of the client. Clients based on proxy classes generated by Microsoft
> Visual Studio from this WSDL will have the code required to use the
> sessions in the proxy. </wsdl:documentation>
>
> 	<wsdl:types>
>
> 		*<!-- SOAP Header Session ID -->
>
> 		<schema targetNamespace="http://xml.apache.org/axis/session"
> xmlns="http://www.w3.org/2001/XMLSchema"> <simpleType name="sessID">
> 				<restriction base="xsd:long"/>
> 			</simpleType>
> 			<element name="sessionID" type="sess:sessID"/>
> 		</schema>*
>
> 		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns="urn:quickquery.ws.biors.biomax.de"
> targetNamespace="urn:quickquery.ws.biors.biomax.de">
>
> 			<!-- Input message elements -->
>
> 			<xsd:simpleType name="formatType">
> 				<wsdl:documentation>
> 					Enumeration type giving the possible data formats in which entries can
> be retrieved from the BioRS server. FASTA - FASTA format.
> 					ENTRY - Complete entries in source formatting.
> 					XML_ENTRY - Complete entry in BioRS internal XML markup.
> 					XML_ELEMENTS - Entry separated into BioRS elements, formatted in BioRS
> internal XML. ELEMENTS - Entry separated into BioRS elements, no additional
> formatting. </wsdl:documentation>
> 				<xsd:restriction base="xsd:string">
> 					<xsd:enumeration value="FASTA"/>
> 					<xsd:enumeration value="ENTRY"/>
> 					<xsd:enumeration value="XML_ENTRY"/>
> 					<xsd:enumeration value="XML_ELEMENTS"/>
> 					<xsd:enumeration value="ELEMENTS"/>
> 				</xsd:restriction>
> 			</xsd:simpleType>
>
> 			<xsd:complexType name="databanksType">
> 				<wsdl:documentation>
> 					The databanksType contains a list of the names of the databanks
> against which the given query should be executed. </wsdl:documentation>
> 				<xsd:sequence>
> 					<xsd:element name="databankName" type="xsd:string" minOccurs="1"
> maxOccurs="999"/> </xsd:sequence>
> 			</xsd:complexType>
>
> 			<xsd:complexType name="requiredElementsType">
> 				<wsdl:documentation>
> 					The requiredElementsType contains a list of the names of the elements
> required when ELEMENTS or XML_ELEMENTS formatType are specified, and only a
> subset of all elements are required. For other result formats, or when all
> elements are required null can be provided for this parameter.
> </wsdl:documentation>
> 				<xsd:sequence>
> 					<xsd:element name="elementName" type="xsd:string" minOccurs="1"
> maxOccurs="999"/> </xsd:sequence>
> 			</xsd:complexType>
>
> 			<!-- Return message elements -->
>
> 			<xsd:complexType name="returnedElementsType">
> 				<wsdl:documentation>
> 					The returnedElementsType type represents a collection ofl BioRS
> elements returned by a query. Each instance of this type consists of one or
> more instance of elementType, each representing an individual element.
> </wsdl:documentation>
> 				<xsd:sequence>
> 					<xsd:element name="element" type="elementType" minOccurs="1"
> maxOccurs="999"/> </xsd:sequence>
> 			</xsd:complexType>
>
> 			<xsd:complexType name="elementType">
> 				<wsdl:documentation>
> 					The elementType type represents an individual BioRS element returned
> by a query. Each instance of this type contains the name of the element and
> the element content. </wsdl:documentation>
> 				<xsd:sequence>
> 					<xsd:element name="elementName" type="xsd:string" minOccurs="1"
> maxOccurs="1"/> <xsd:element name="elementContent" type="xsd:string"
> minOccurs="1" maxOccurs="1"/> </xsd:sequence>
> 			</xsd:complexType>
>
> 			<xsd:element name="result">
> 				<wsdl:documentation>
> 					The result type contains a single result returned by a BioRS query.
> Each results consists of the total number of results for the query, the
> numer of this result, the databank the result is from and either a complete
> result in the specified format, a collection of elements, if the ELEMENTS
> result format was specified, or a message indicating that no results
> matched the given query. </wsdl:documentation>
> 				<xsd:complexType>
> 					<xsd:sequence>
> 						<xsd:element name="resultNumber" type="xsd:int" minOccurs="0"
> maxOccurs="1"/> <xsd:element name="totalResults" type="xsd:int"
> minOccurs="1" maxOccurs="1"/> <xsd:element name="databank"
> type="xsd:string" minOccurs="0" maxOccurs="1"/> <xsd:choice>
> 							<xsd:element name="entry" type="xsd:string"/>
> 							<xsd:element name="returnedElements" type="returnedElementsType"/>
> 							<xsd:element name="noMatchesMessage" type="xsd:string"/>
> 						</xsd:choice>
> 					</xsd:sequence>
> 				</xsd:complexType>
> 			</xsd:element>
>
> 			<!-- Methods signatures -->
>
> 			<xsd:element name="getBiorsEntry">
> 				<wsdl:documentation>
> 					Required parameters:
> 					username - username to be used to connect to the BioRS server used by
> the service. password - password matching the username provided.
> 					queryString - the query in BioRS query language.
> 					databanks - an instance of type databanksType contianing the names of
> the databanks against which the uery should be executed. returnFormat - the
> format in which results should be returned (FASTA, ENTRY, XML_ENTRY,
> ELEMENTS, XML_ELEMENTS). requiredElements - an instance of type
> requiredElementsType containing the names of the elements to be returned
> (or null). If you do not have a username/password, set these as null to
> login as a guest. </wsdl:documentation>
> 				<xsd:complexType>
> 					<xsd:sequence>
> 						<xsd:element name="username" type="xsd:string" nillable="true"
> maxOccurs="1"/> <xsd:element name="password" type="xsd:string"
> nillable="true" maxOccurs="1"/> <xsd:element name="queryString"
> type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element
> name="databanks" type="databanksType" minOccurs="1" maxOccurs="1"/>
> <xsd:element name="returnFormat" type="formatType" minOccurs="1"
> maxOccurs="1"/> <xsd:element name="requiredElements"
> type="requiredElementsType" minOccurs="0" maxOccurs="1"/> </xsd:sequence>
> 				</xsd:complexType>
> 			</xsd:element>
>
> 			<xsd:element name="getBiorsEntryResponse">
> 				<xsd:complexType>
> 					<xsd:sequence>
> 						<xsd:element ref="result"/>
> 					</xsd:sequence>
> 				</xsd:complexType>
> 			</xsd:element>
>
> 		</xsd:schema>
> 	</wsdl:types>
>
> 	*<message name="soapHeader">
> 		<part name="sessID" element="sess:sessionID" />
> 	</message> *
>
> 	<message name="getBiorsEntryReq">
> 		<part name="parameters" element="types:getBiorsEntry"/>
> 	</message>
> 	<message name="getBiorsEntryResp">
> 		<part name="parameters" element="types:getBiorsEntryResponse"/>
> 	</message>
>
> 	<portType name="BiorsQuickQueryPortType">
> 		<operation name="getBiorsEntry">
> 			<input message="tns:getBiorsEntryReq"/>
> 			<output message="tns:getBiorsEntryResp"/>
> 		</operation>
> 	</portType>
>
> 	<wsdl:binding name="BiorsQuickQuerySOAPBinding"
> type="tns:BiorsQuickQueryPortType"> <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation
> name="getBiorsEntry">
> 			<soap:operation soapAction="getBiorsEntry" style="document"/>
> 			<wsdl:input>
> 				*<soap:header message="tns:soapHeader" part="sessID" use="literal"/>*
> 				<soap:body use="literal"/>
> 			</wsdl:input>
> 			<wsdl:output>
> 				*<soap:header message="tns:soapHeader" part="sessID" use="literal"/>*
> 				<soap:body use="literal"/>
> 			</wsdl:output>
> 		</wsdl:operation>
> 	</wsdl:binding>
>
> 	<service name="BiorsQuickQueryService">
> 		<port name="BiorsQuickQuery" binding="tns:BiorsQuickQuerySOAPBinding">
> 			<soap:address
> location="http://146.107.217.111:8081/biors/services/BiorsQuickQuery"/>
> </port>
> 	</service>
> </wsdl:definitions>
>
> Sueveges Gyoergy wrote:
> > Hi all,
> >
> >  I'm now testing how axis works. I need a session based web service,
> > so I  test the SimpleSessionHandler.
> > On the API site it is written, that it will check if there is a
> > header  with session_id, and when there is not, then is creates a
> > session. So I  would except that in the generated wsdl
> > (http://localhost:8085/axis/services/ZagreusService?wsdl) there is a
> > soap  header info in the bining section. So now how will the WSDL2Java
> > know how  to create such a client that creates soap header with
> > sessionid when  sending request? Do I imagine the things in wrong way?
> > Or Is it not a suggested way to create wsdl from the server classes,
> > and  then to create the client from wsdl?
> >
> > I deployed my test Servie on the server side with the following wsdd:
> >
> >
> > <deployment xmlns="http://xml.apache.org/axis/wsdd/"
> >             xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> >
> > <service name="ZagreusService" provider="java:RPC">
> >  <requestFlow>
> >    <handler name="soapMonitor"
> >     type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
> >    <handler name="sessionHandler"
> >    type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
> >   </requestFlow>
> >   <responseFlow>
> >      <handler name="responsesessionHandler"
> > type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
> >        <handler name="responsesoapMonitor"
> >      type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
> >   </responseFlow>
> >   <parameter name="className"
> > value="com.etixpert.zagreus.server.axis.TestService"/>
> >   <parameter name="allowedMethods" value="*"/>
> >  </service>
> >
> > </deployment>
> >
> > I have the following TestService:
> >
> >   package com.etixpert.zagreus.server.axis;
> >
> >   import org.apache.axis.transport.http.*;
> >   import org.apache.axis.handlers.SimpleSessionHandler;
> >   import org.apache.axis.session.*;
> >   import org.apache.axis.*;
> >   import java.util.*;
> >
> >
> >   public class TestService {
> >
> >     public String test(String param) {
> >         MessageContext context = MessageContext.getCurrentContext();
> >         Session session = context.getSession();
> >
> >         ......
> >
> >     }
> >
> >     public void login(String user, String password) throws AxisFault {
> >         ....
> >
> >     }
> >  }
> >
> > Generated wsdl. where there is no header info:
> >
> >  <?xml version="1.0" encoding="UTF-8"?>
> > <wsdl:definitions
> > targetNamespace="http://localhost:8085/axis/services/ZagreusService"
> > xmlns:apachesoap="http://xml.apache.org/xml-soap"
> > xmlns:impl="http://localhost:8085/axis/services/ZagreusService"
> > xmlns:intf="http://localhost:8085/axis/services/ZagreusService"
> > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> > xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
> > xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> > <!--WSDL created by Apache Axis version: 1.3
> > Built on Oct 05, 2005 (05:23:37 EDT)-->
> >
> >    <wsdl:message name="loginResponse">
> >
> >    </wsdl:message>
> >
> >    <wsdl:message name="testResponse">
> >
> >       <wsdl:part name="testReturn" type="soapenc:string"/>
> >
> >    </wsdl:message>
> >
> >    <wsdl:message name="loginRequest">
> >
> >       <wsdl:part name="user" type="soapenc:string"/>
> >
> >       <wsdl:part name="password" type="soapenc:string"/>
> >
> >    </wsdl:message>
> >
> >    <wsdl:message name="testRequest">
> >
> >       <wsdl:part name="param" type="soapenc:string"/>
> >
> >    </wsdl:message>
> >
> >    <wsdl:portType name="TestService">
> >
> >       <wsdl:operation name="test" parameterOrder="param">
> >
> >          <wsdl:input message="impl:testRequest" name="testRequest"/>
> >
> >          <wsdl:output message="impl:testResponse" name="testResponse"/>
> >
> >       </wsdl:operation>
> >
> >       <wsdl:operation name="login" parameterOrder="user password">
> >
> >          <wsdl:input message="impl:loginRequest" name="loginRequest"/>
> >
> >          <wsdl:output message="impl:loginResponse" name="loginResponse"/>
> >
> >       </wsdl:operation>
> >
> >    </wsdl:portType>
> >
> >    <wsdl:binding name="ZagreusServiceSoapBinding"
> > type="impl:TestService">
> >
> >       <wsdlsoap:binding style="rpc"
> > transport="http://schemas.xmlsoap.org/soap/http"/>
> >
> >       <wsdl:operation name="test">
> >
> >          <wsdlsoap:operation soapAction=""/>
> >
> >          <wsdl:input name="testRequest">
> >
> >             <wsdlsoap:body
> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
> >
> >          </wsdl:input>
> >
> >          <wsdl:output name="testResponse">
> >
> >             <wsdlsoap:body
> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > namespace="http://localhost:8085/axis/services/ZagreusService"
> > use="encoded"/>
> >
> >          </wsdl:output>
> >
> >       </wsdl:operation>
> >
> >       <wsdl:operation name="login">
> >
> >          <wsdlsoap:operation soapAction=""/>
> >
> >          <wsdl:input name="loginRequest">
> >
> >             <wsdlsoap:body
> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
> >
> >          </wsdl:input>
> >
> >          <wsdl:output name="loginResponse">
> >
> >             <wsdlsoap:body
> > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> > namespace="http://localhost:8085/axis/services/ZagreusService"
> > use="encoded"/>
> >
> >          </wsdl:output>
> >
> >       </wsdl:operation>
> >
> >    </wsdl:binding>
> >
> >    <wsdl:service name="TestServiceService">
> >
> >       <wsdl:port binding="impl:ZagreusServiceSoapBinding"
> > name="ZagreusService">
> >
> >          <wsdlsoap:address
> > location="http://localhost:8085/axis/services/ZagreusService"/>
> >
> >       </wsdl:port>
> >
> >    </wsdl:service>
> >
> > </wsdl:definitions>
> >
> >
> > Thnx for the help
> >  George

-- 

Re: Simplesession, soap header not appeared in the generated wsdl

Posted by Richard Gregory <ri...@gsf.de>.
Hi George,

Unfortuntely, axis does not include the SimpleSessionHandler details in 
the wsdl it generates, or any header details as far as I know. 
Similarly, if you write the wsdl yourself  (see the example wsdl below, 
with the relevant parts highlighted in *bold*) to include the required 
information, axis will not include it in any of the files created on the 
client side, although it will be incoprporated by any .Net clients 
genreated from the wsdl (so if your services will be used by .Net 
clients it is worth doing). For axis clients, the only option is to 
include <documentation/> elements in a hand written wsdl to state that 
the SimpleSessionHandler is needed on the client side.

Cheers,

Richard.

<wsdl:definitions targetNamespace="urn:wsdl.quickquery.ws.biors.biomax.de" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:apachesoap="http://xml.apache.org/xml-soap" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    *xmlns:sess="http://xml.apache.org/axis/session"*
    xmlns:tns="urn:wsdl.quickquery.ws.biors.biomax.de"
    xmlns:types="urn:quickquery.ws.biors.biomax.de">

	<wsdl:documentation>Web Service providing the ability to query a BioRS server with a simple text query. Clients invoking the service specify a simple text query with one or more search terms linked with "AND"/"OR" (or "&amp;"/"|") operators, which will be evaluated against the BioRS server's AllText index (or indices). The result format to be returned and the list of databanks to be searched  must be provided as parameters, and also optionally, a specific list of elements to be returned (only applicable to the ELEMENTS and XML_ELEMENTS result formats). Clients with their own username/password for the BioRS server may provide these parameters, or if these a provided as null a default &quot;guest&quot; username is used. A session is maintained between the client and service via SOAP Header session IDs, and each invocation of an operation of the service returns a successive entry from the set of entries matching the given query, or a message indicating that no entries matched the query. Each entry is returned with the number of the entry and the total number of entries matching the query, enabling clients to determine when all entries have been returned. 
	In order to make use of the SOAP header session IDs, Apache Axis clients need only to include the org.apache.axis.handlers.SimpleSessionHandler in the request and response flows of the client. Clients based on proxy classes generated by Microsoft Visual Studio from this WSDL will have the code required to use the sessions in the proxy.
</wsdl:documentation>

	<wsdl:types>
	
		*<!-- SOAP Header Session ID -->	
	
		<schema targetNamespace="http://xml.apache.org/axis/session" xmlns="http://www.w3.org/2001/XMLSchema">
			<simpleType name="sessID">
				<restriction base="xsd:long"/>
			</simpleType>
			<element name="sessionID" type="sess:sessID"/>
		</schema>*
	
		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:quickquery.ws.biors.biomax.de" targetNamespace="urn:quickquery.ws.biors.biomax.de">
			
			<!-- Input message elements -->	
			
			<xsd:simpleType name="formatType">
				<wsdl:documentation>
					Enumeration type giving the possible data formats in which entries can be retrieved from the BioRS server.
					FASTA - FASTA format.
					ENTRY - Complete entries in source formatting.
					XML_ENTRY - Complete entry in BioRS internal XML markup.
					XML_ELEMENTS - Entry separated into BioRS elements, formatted in BioRS internal XML.
					ELEMENTS - Entry separated into BioRS elements, no additional formatting.
				</wsdl:documentation>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="FASTA"/>
					<xsd:enumeration value="ENTRY"/>
					<xsd:enumeration value="XML_ENTRY"/>
					<xsd:enumeration value="XML_ELEMENTS"/>
					<xsd:enumeration value="ELEMENTS"/>
				</xsd:restriction>
			</xsd:simpleType>
			
			<xsd:complexType name="databanksType">
				<wsdl:documentation>
					The databanksType contains a list of the names of the databanks against which the given query should be executed.
				</wsdl:documentation>
				<xsd:sequence>
					<xsd:element name="databankName" type="xsd:string" minOccurs="1" maxOccurs="999"/>
				</xsd:sequence>
			</xsd:complexType>
			
			<xsd:complexType name="requiredElementsType">
				<wsdl:documentation>
					The requiredElementsType contains a list of the names of the elements required when ELEMENTS or XML_ELEMENTS formatType are specified, and only a subset of all elements are required. For other result formats, or when all elements are required null can be provided for this parameter.
				</wsdl:documentation>
				<xsd:sequence>
					<xsd:element name="elementName" type="xsd:string" minOccurs="1" maxOccurs="999"/>
				</xsd:sequence>
			</xsd:complexType>
			
			<!-- Return message elements -->
			
			<xsd:complexType name="returnedElementsType">
				<wsdl:documentation>
					The returnedElementsType type represents a collection ofl BioRS elements returned by a query. Each instance of this type consists of one or more instance of elementType, each representing an individual element.
				</wsdl:documentation>
				<xsd:sequence>
					<xsd:element name="element" type="elementType" minOccurs="1" maxOccurs="999"/>
				</xsd:sequence>
			</xsd:complexType>
			
			<xsd:complexType name="elementType">
				<wsdl:documentation>
					The elementType type represents an individual BioRS element returned by a query. Each instance of this type contains the name of the element and the element content.
				</wsdl:documentation>
				<xsd:sequence>
					<xsd:element name="elementName" type="xsd:string" minOccurs="1" maxOccurs="1"/>
					<xsd:element name="elementContent" type="xsd:string" minOccurs="1" maxOccurs="1"/>
				</xsd:sequence>
			</xsd:complexType>
			
			<xsd:element name="result">
				<wsdl:documentation>
					The result type contains a single result returned by a BioRS query. Each results consists of the total number of results for the query, the numer of this result, the databank the result is from and either a complete result in the specified format, a collection of elements, if the ELEMENTS result format was specified, or a message indicating that no results matched the given query.
				</wsdl:documentation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="resultNumber" type="xsd:int" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="totalResults" type="xsd:int" minOccurs="1" maxOccurs="1"/>
						<xsd:element name="databank" type="xsd:string" minOccurs="0" maxOccurs="1"/>
						<xsd:choice>
							<xsd:element name="entry" type="xsd:string"/>
							<xsd:element name="returnedElements" type="returnedElementsType"/>
							<xsd:element name="noMatchesMessage" type="xsd:string"/>
						</xsd:choice>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			
			<!-- Methods signatures -->
			
			<xsd:element name="getBiorsEntry">
				<wsdl:documentation>
					Required parameters:
					username - username to be used to connect to the BioRS server used by the service. 
					password - password matching the username provided. 
					queryString - the query in BioRS query language.
					databanks - an instance of type databanksType contianing the names of the databanks against which the uery should be executed.
					returnFormat - the format in which results should be returned (FASTA, ENTRY, XML_ENTRY, ELEMENTS, XML_ELEMENTS).
					requiredElements - an instance of type requiredElementsType containing the names of the elements to be returned (or null).
					If you do not have a username/password, set these as null to login as a guest.
				</wsdl:documentation>	
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="username" type="xsd:string" nillable="true" maxOccurs="1"/>
						<xsd:element name="password" type="xsd:string" nillable="true" maxOccurs="1"/>
						<xsd:element name="queryString" type="xsd:string" minOccurs="1" maxOccurs="1"/>
						<xsd:element name="databanks" type="databanksType" minOccurs="1" maxOccurs="1"/>
						<xsd:element name="returnFormat" type="formatType" minOccurs="1" maxOccurs="1"/>
						<xsd:element name="requiredElements" type="requiredElementsType" minOccurs="0" maxOccurs="1"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			
			<xsd:element name="getBiorsEntryResponse">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element ref="result"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>

		</xsd:schema>
	</wsdl:types>
	
	*<message name="soapHeader"> 
		<part name="sessID" element="sess:sessionID" /> 
	</message> *
	
	<message name="getBiorsEntryReq">
		<part name="parameters" element="types:getBiorsEntry"/>
	</message>
	<message name="getBiorsEntryResp">
		<part name="parameters" element="types:getBiorsEntryResponse"/>
	</message>
	
	<portType name="BiorsQuickQueryPortType">
		<operation name="getBiorsEntry">
			<input message="tns:getBiorsEntryReq"/>
			<output message="tns:getBiorsEntryResp"/>
		</operation>
	</portType>
	
	<wsdl:binding name="BiorsQuickQuerySOAPBinding" type="tns:BiorsQuickQueryPortType">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<wsdl:operation name="getBiorsEntry">
			<soap:operation soapAction="getBiorsEntry" style="document"/>
			<wsdl:input>
				*<soap:header message="tns:soapHeader" part="sessID" use="literal"/>*
				<soap:body use="literal"/>
			</wsdl:input>
			<wsdl:output>
				*<soap:header message="tns:soapHeader" part="sessID" use="literal"/>*
				<soap:body use="literal"/>
			</wsdl:output>
		</wsdl:operation>	
	</wsdl:binding>
	
	<service name="BiorsQuickQueryService">
		<port name="BiorsQuickQuery" binding="tns:BiorsQuickQuerySOAPBinding">
			<soap:address location="http://146.107.217.111:8081/biors/services/BiorsQuickQuery"/>
		</port>
	</service>
</wsdl:definitions>



Sueveges Gyoergy wrote:

> Hi all,
>
>  I'm now testing how axis works. I need a session based web service, 
> so I  test the SimpleSessionHandler.
> On the API site it is written, that it will check if there is a 
> header  with session_id, and when there is not, then is creates a 
> session. So I  would except that in the generated wsdl  
> (http://localhost:8085/axis/services/ZagreusService?wsdl) there is a 
> soap  header info in the bining section. So now how will the WSDL2Java 
> know how  to create such a client that creates soap header with 
> sessionid when  sending request? Do I imagine the things in wrong way?
> Or Is it not a suggested way to create wsdl from the server classes, 
> and  then to create the client from wsdl?
>
> I deployed my test Servie on the server side with the following wsdd:
>
>
> <deployment xmlns="http://xml.apache.org/axis/wsdd/"
>             xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
>
> <service name="ZagreusService" provider="java:RPC">
>  <requestFlow>
>    <handler name="soapMonitor"
>     type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
>    <handler name="sessionHandler"
>    type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
>   </requestFlow>
>   <responseFlow>
>      <handler name="responsesessionHandler"
> type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
>        <handler name="responsesoapMonitor"
>      type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
>   </responseFlow>
>   <parameter name="className"  
> value="com.etixpert.zagreus.server.axis.TestService"/>
>   <parameter name="allowedMethods" value="*"/>
>  </service>
>
> </deployment>
>
> I have the following TestService:
>
>   package com.etixpert.zagreus.server.axis;
>
>   import org.apache.axis.transport.http.*;
>   import org.apache.axis.handlers.SimpleSessionHandler;
>   import org.apache.axis.session.*;
>   import org.apache.axis.*;
>   import java.util.*;
>
>
>   public class TestService {
>
>     public String test(String param) {   
>         MessageContext context = MessageContext.getCurrentContext();
>         Session session = context.getSession();
>
>         ......
>
>     }
>
>     public void login(String user, String password) throws AxisFault {
>         ....
>
>     }
>  }
>
> Generated wsdl. where there is no header info:
>
>  <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions
> targetNamespace="http://localhost:8085/axis/services/ZagreusService"
> xmlns:apachesoap="http://xml.apache.org/xml-soap"
> xmlns:impl="http://localhost:8085/axis/services/ZagreusService"
> xmlns:intf="http://localhost:8085/axis/services/ZagreusService"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <!--WSDL created by Apache Axis version: 1.3
> Built on Oct 05, 2005 (05:23:37 EDT)-->
>
>    <wsdl:message name="loginResponse">
>
>    </wsdl:message>
>
>    <wsdl:message name="testResponse">
>
>       <wsdl:part name="testReturn" type="soapenc:string"/>
>
>    </wsdl:message>
>
>    <wsdl:message name="loginRequest">
>
>       <wsdl:part name="user" type="soapenc:string"/>
>
>       <wsdl:part name="password" type="soapenc:string"/>
>
>    </wsdl:message>
>
>    <wsdl:message name="testRequest">
>
>       <wsdl:part name="param" type="soapenc:string"/>
>
>    </wsdl:message>
>
>    <wsdl:portType name="TestService">
>
>       <wsdl:operation name="test" parameterOrder="param">
>
>          <wsdl:input message="impl:testRequest" name="testRequest"/>
>
>          <wsdl:output message="impl:testResponse" name="testResponse"/>
>
>       </wsdl:operation>
>
>       <wsdl:operation name="login" parameterOrder="user password">
>
>          <wsdl:input message="impl:loginRequest" name="loginRequest"/>
>
>          <wsdl:output message="impl:loginResponse" name="loginResponse"/>
>
>       </wsdl:operation>
>
>    </wsdl:portType>
>
>    <wsdl:binding name="ZagreusServiceSoapBinding" 
> type="impl:TestService">
>
>       <wsdlsoap:binding style="rpc"
> transport="http://schemas.xmlsoap.org/soap/http"/>
>
>       <wsdl:operation name="test">
>
>          <wsdlsoap:operation soapAction=""/>
>
>          <wsdl:input name="testRequest">
>
>             <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
>
>          </wsdl:input>
>
>          <wsdl:output name="testResponse">
>
>             <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://localhost:8085/axis/services/ZagreusService"  
> use="encoded"/>
>
>          </wsdl:output>
>
>       </wsdl:operation>
>
>       <wsdl:operation name="login">
>
>          <wsdlsoap:operation soapAction=""/>
>
>          <wsdl:input name="loginRequest">
>
>             <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>
>
>          </wsdl:input>
>
>          <wsdl:output name="loginResponse">
>
>             <wsdlsoap:body
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://localhost:8085/axis/services/ZagreusService"  
> use="encoded"/>
>
>          </wsdl:output>
>
>       </wsdl:operation>
>
>    </wsdl:binding>
>
>    <wsdl:service name="TestServiceService">
>
>       <wsdl:port binding="impl:ZagreusServiceSoapBinding"  
> name="ZagreusService">
>
>          <wsdlsoap:address
> location="http://localhost:8085/axis/services/ZagreusService"/>
>
>       </wsdl:port>
>
>    </wsdl:service>
>
> </wsdl:definitions>
>
>
> Thnx for the help
>  George
>
>


Re: SOAP:Header question - how wsdl2java or java2wsdl handle the soap header part

Posted by Shaoguang Cong <sc...@yahoo.com>.
I have read an email chain betwen Tysnes Are Thobias, Terance Dias and Anne Thomas Manes on 2005-10-25, discussing the SOAP Header question. That'll answer George's question.  I've added some new questions on the same issue below. 
   
  I run into two problems with Axis1.3 wsdl2java.  The first problem is the same as the one discussed by Anne etc.  Anne provided a solution that is to define the input message with two parts.  That's the same as an example given in the Axis 1.3 package.  I tried it too. The WSDL2Java will generate the client stub with the soap header part being part of the method signature.  That solution won't solve my problem because 1) it looks strange to have the soap header as part of the method signature. 2) the WSDL defined that way isn't using the "wrapped" document/literal style and it isn't WS-I compliant either.
   
  Our client is .NET where interoperability is critical.  So we need to make sure the WSDLs we defined are WS-I compliant.  
   
  The second problem with using Axis1.3 wsdl2java is sometimes it's unpredictable. I added an annotation/documentation tag to a complex type, that makes the generator somehow switched from"wrapped" to "non-wrapped" style in the generated code.  
   
  I wonder if these are something that Axis 1.3 doesn't support, and will these be taken into consideration in new versions of Axis?
   
  Thanks.
  Shaoguang
   
  p.s. For George, you can search the mailing list archive to find the email chain mentioned.  Try keyword "SAOP:Header question". 
  
Sueveges Gyoergy <ge...@etixpert.com> wrote:
  Hi all,

I'm now testing how axis works. I need a session based web service, so I 
test the SimpleSessionHandler.
On the API site it is written, that it will check if there is a header 
with session_id, and when there is not, then is creates a session. So I 
would except that in the generated wsdl 
(http://localhost:8085/axis/services/ZagreusService?wsdl) there is a soap 
header info in the bining section. So now how will the WSDL2Java know how 
to create such a client that creates soap header with sessionid when 
sending request? Do I imagine the things in wrong way?
Or Is it not a suggested way to create wsdl from the server classes, and 
then to create the client from wsdl?

I deployed my test Servie on the server side with the following wsdd:


xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">



type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>
type="java:org.apache.axis.handlers.SimpleSessionHandler"/>


type="java:org.apache.axis.handlers.SimpleSessionHandler"/>
type="java:com.etixpert.zagreus.server.axis.SOAPMonitor"/>


value="com.etixpert.zagreus.server.axis.TestService"/>






I have the following TestService:

package com.etixpert.zagreus.server.axis;

import org.apache.axis.transport.http.*;
import org.apache.axis.handlers.SimpleSessionHandler;
import org.apache.axis.session.*;
import org.apache.axis.*;
import java.util.*;


public class TestService {

public String test(String param) { 
MessageContext context = MessageContext.getCurrentContext();
Session session = context.getSession();

......

}

public void login(String user, String password) throws AxisFault {
....

}
}

Generated wsdl. where there is no header info:


targetNamespace="http://localhost:8085/axis/services/ZagreusService"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://localhost:8085/axis/services/ZagreusService"
xmlns:intf="http://localhost:8085/axis/services/ZagreusService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Built on Oct 05, 2005 (05:23:37 EDT)-->















































transport="http://schemas.xmlsoap.org/soap/http"/>







encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>





encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8085/axis/services/ZagreusService" 
use="encoded"/>











encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://axis.server.zagreus.etixpert.com" use="encoded"/>





encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8085/axis/services/ZagreusService" 
use="encoded"/>









name="ZagreusService">

location="http://localhost:8085/axis/services/ZagreusService"/>








Thnx for the help
George


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/


		
---------------------------------
 Yahoo! Autos. Looking for a sweet ride? Get pricing, reviews, & more on new and used cars.