Hello friends - I'm in the process of integrating two systems, I am using the AXIS SOAP engine and my counterpart at another organization is using the .NET SOAP engine. I have managed to create some stubs based on the other parties .WSDLs. They provided the following WSDL for one of our transactions (URLS have been modified for confidentiality purposes):
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s=" http://www.w3.org/2001/XMLSchema" xmlns:s0=" http://www.random.customer.com/webservices" xmlns:soapenc=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm=" http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime=" http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace=" http://www.random.customer.com/webservices" xmlns=" http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace=" http://www.random.customer.com/webservices"> <s:element name="InsertOrUpdateConsumption"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="sXML" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="InsertOrUpdateConsumptionResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name=" InsertOrUpdateConsumptionResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> <message name="InsertOrUpdateConsumptionSoapIn"> <part name="parameters" element="s0:InsertOrUpdateConsumption" /> </message> <message name="InsertOrUpdateConsumptionSoapOut"> <part name="parameters" element="s0:InsertOrUpdateConsumptionResponse" /> </message> <portType name="XXXServiceSoap"> <operation name="InsertOrUpdateConsumption"> <input message="s0:InsertOrUpdateConsumptionSoapIn" /> <output message="s0:InsertOrUpdateConsumptionSoapOut" /> </operation> </portType> <binding name="XXXServiceSoap" type="s0:XXXServiceSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style=" document" /> <operation name="InsertOrUpdateConsumption"> <soap:operation soapAction=" http://www.random.customer.com/webservices/InsertOrUpdateConsumption" style ="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="XXXService"> <port name="XXXServiceSoap" binding="s0:XXXServiceSoap"> <soap:address location=" http://XXX.random.customer.com:81/XXX2/XXXService.asmx" /> </port> </service> </definitions> I went ahead and generated classes based on this .WSDL and they compile fine. I seem to be able to call the method and don't get a fault thrown. However, the logging that happens at execute time seems to indicate that the XML message I am sending across the wire is getting encoded, like this: DEBUG [main] (Call.java:2548) - <?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:Body> <InsertOrUpdateConsumption xmlns ="http://www.random.customer.com/webservices"> <sXML><?xml version="1.0" encoding="UTF-8" standalone="yes"?> <premiseConsumption> <servicePointId>9236524392</servicePointId><consumption> <consumptionDate>02/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>45.106852</consumptionAmount> </consumption><consumption> <consumptionDate>03/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>46.717811</consumptionAmount> </consumption><consumption> <consumptionDate>04/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>51.550688</consumptionAmount> </consumption><consumption> <consumptionDate>04/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>4.832877</consumptionAmount> </consumption><consumption> <consumptionDate>05/2004</consumptionDate> <consumptionType>KWH</consumptionType><consu mptionAmount>45.106852</consumptionAmount></consumption> <consumption><consumptionDate>06/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>51.550688</consumptionAmount> </consumption><consumption> <consumptionDate>06/2004</consumptionDate> <consumptionType>KWH</consumptionType> <consumptionAmount>6.443836</consumptionAmount> </consumption></premiseConsumption> </sXML> </InsertOrUpdateConsumption> </soapenv:Body> </soapenv:Envelope> I tend to think that this is a result of the third party taking a simplistic approach to defining his web service such that it doesn't expect an entire XML document, but rather one element of type string and consequently AXIS has encoded my XML. I have provided the developer with an .xsd defining the xml that I expect to send his process; with the > and < strings replaced with their appropriate counterparts, the XML above conforms to that .xsd. On the other hand, I am entirely new to web services, and maybe this is what the output looks like any time you use literal encoding to send a full blown XML message in the SOAP envelope. I'm also curious if I can force AXIS not to encode my XML string in the event that I am not able to convince my partner to change the web service he has operational. Any and all insight is appreciated. Thanks. brian
