I have run into a problem using sessionID in soap header, for .net clients that uses wsdl.exe generated proxy. I have followed this link to use SimpleSessionHandler,
http://www.fawcette.com/javapro/2003_04/online/wsdl_kjones_04_29_03/ with which I have successfully made it work for axis, gSoap, and SOAP::Lite perl clients. I have also used the method described in this link http://marc.theaimsgroup.com/?l=axis-user&m=108324718302792&w=2, to try connect .net clients without any success. I was using doc/lit wrapped style. While the link there did mention it is for doc/literal style, and the wsdl indicates that it is doc/literal style, (see wsdl included at the end), the response soap header looks to me is not doc/lit style. Any idea why .net doesn't work? .net->axis request: =================== <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <getSession xmlns="urn:myname.com"> <username xmlns="">admin</username> <password xmlns="" /> </getSession> </soap:Body> </soap:Envelope> =================== the axis-> .net response: ========================= 287 <?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> <ns1:sessionID soapenv:mustUnderstand="0" xsi:type="xsd:long" xmlns:ns1="http://xml.apache.org/axis/session">-5227012230670020468</ns1:ses sionID> </soapenv:Header> ... .net client comlained about Unhandled Exception: System.InvalidOperationException: There is an error in XML document (4, 4). ---> System.InvalidOperationException: The specified type was not recognized: name='long', namespace='http://www.w3.org/2001/XMLSchema', at <sessionID xmlns='http://xml.apache.org/axis/session'>. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read1_ session(Boolean isNullable, Boolean checkType) at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read8_ OutHeaders() ... Here is the wsdl file ============================ <?xml version="1.0" encoding="UTF-8" ?> <wsdl:definitions targetNamespace="urn:myname.com" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="urn:myname.com" xmlns:intf="urn:myname.com" 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" xmlns:sens="http://xml.apache.org/axis/session"> <documentation /> <wsdl:types> <schema targetNamespace="http://xml.apache.org/axis/session" xmlns="http://www.w3.org/2001/XMLSchema"> <simpleType name="session"> <restriction base="xsd:long"/> </simpleType> <element name="sessionID" type="sens:session"/> </schema> <schema targetNamespace="urn:myname.com" xmlns="http://www.w3.org/2001/XMLSchema"> <element name="getSession"> <complexType> <sequence> <element name="username" type="xsd:string" /> <element name="password" type="xsd:string" /> </sequence> </complexType> </element> <element name="getSessionResponse"> <complexType> <sequence> <element name="getSessionReturn" type="xsd:string" form="qualified"/> </sequence> </complexType> </element> <element name="closeSession"> <complexType /> </element> <element name="closeSessionResponse"> <complexType /> </element> </schema> </wsdl:types> <wsdl:message name="soapHeader"> <wsdl:part name="sessionID" element="sens:sessionID" /> </wsdl:message> <wsdl:message name="getSessionRequest"> <wsdl:part element="impl:getSession" name="parameters" /> </wsdl:message> <wsdl:message name="getSessionResponse"> <wsdl:part element="impl:getSessionResponse" name="parameters" /> </wsdl:message> <wsdl:message name="closeSessionRequest"> <wsdl:part element="impl:closeSession" name="parameters" /> </wsdl:message> <wsdl:message name="closeSessionResponse"> <wsdl:part element="impl:closeSessionResponse" name="parameters" /> </wsdl:message> <wsdl:portType name="MynameService"> <wsdl:operation name="getSession" parameterOrder=""> <wsdl:input message="impl:getSessionRequest" name="getSessionRequest" /> <wsdl:output message="impl:getSessionResponse" name="getSessionResponse" /> </wsdl:operation> <wsdl:operation name="closeSession"> <wsdl:input message="impl:closeSessionRequest" name="closeSessionRequest" /> <wsdl:output message="impl:closeSessionResponse" name="closeSessionResponse" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="MynameServiceSoapBinding" type="impl:MynameService"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getSession"> <wsdlsoap:operation soapAction="" /> <wsdl:input name="getSessionRequest"> <wsdlsoap:header message="impl:soapHeader" part="sessionID" use="literal"/> <wsdlsoap:body namespace="urn:myname.com" use="literal" /> </wsdl:input> <wsdl:output name="getSessionResponse"> <wsdlsoap:header message="impl:soapHeader" part="sessionID" use="literal"/> <wsdlsoap:body namespace="urn:myname.com" use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="closeSession"> <wsdlsoap:operation soapAction="" /> <wsdl:input name="closeSessionRequest"> <wsdlsoap:header message="impl:soapHeader" part="sessionID" use="literal"/> <wsdlsoap:body namespace="urn:myname.com" use="literal" /> </wsdl:input> <wsdl:output name="closeSessionResponse"> <wsdlsoap:header message="impl:soapHeader" part="sessionID" use="literal"/> <wsdlsoap:body namespace="urn:myname.com" use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="MynameServiceService"> <wsdl:port binding="impl:MynameServiceSoapBinding" name="MynameService"> <wsdlsoap:address location="http://localhost:8080/services/MynameService" /> </wsdl:port> </wsdl:service> </wsdl:definitions> ================================
