Hi,
I have a problem with axis 1.4, and I am not sure if it is a bug.
I need to connect to an application that expose a generic web service.
The application is StreamServe, and the web service is meant to be able to execute any service since we provide the service name and version in the request.
So being generic, the data is defined as soapenc:base64, but the web service itself is document literal. (WSDL will follow at the end).
I find this combination really odd and I am not sure if it is valid?
Here are the details:
The server expects the following kind of input:
<SendDocument xmlns="http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.xsd ">
<ServiceDescription>whprod_service</ServiceDescription>
<ServiceVersion>1</ServiceVersion>
<ServerID></ServerID>
<DocData>PHRhYmxlPjxzY2hlbWUuc3RvY2ttPjx3YXJlaG91c2U+Q0w8L3dhcmVob3VzZT48cHJvZHVjdD5SVEstMDQjNzExMTAxLUwgICAgIDwvcHJvZHVjdD48L3NjaGVtZS5zdG9ja20+PC90YWJsZT4=</DocData>
</SendDocument>
But Axis generates this instead (I removed some DocData elements to shorten it):
<SendDocument xmlns=" http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.xsd">
<ServiceDescription>whprod_service</ServiceDescription>
<ServiceVersion>1</ServiceVersion>
<ServerID></ServerID>
<DocData xsi:type="xsd:byte">60</DocData>
<DocData xsi:type="xsd:byte">116</DocData>
<DocData xsi:type="xsd:byte">97</DocData>
<DocData xsi:type="xsd:byte">98</DocData>
</SendDocument>
All I do is this:
String test = "<table><scheme.stockm><warehouse>CL</warehouse><product>RTK-04#711101-L </product></scheme.stockm></table>";
byte[] array = test.getBytes();
String value = binding.sendDocument("whprod_service", "1", "", array);
I was able to make it works by changing the type of DocData to xs:anyType in the WSDL and encoding the string myself like this:
String test = "<table><scheme.stockm><warehouse>CL</warehouse><product>RTK-04#711101-L </product></scheme.stockm></table>";
byte[] array = test.getBytes();
String encoded = Base64.encode(array);
String value = binding.sendDocument("whprod_service", "1", "", encoded);
It gives me this:
<SendDocument xmlns="http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.xsd">
<ServiceDescription>whprod_service</ServiceDescription>
<ServiceVersion>1</ServiceVersion>
<ServerID></ServerID>
<DocData xsi:type="xsd:string">PHRhYmxlPjxzY2hlbWUuc3RvY2ttPjx3YXJlaG91c2U+Q0w8L3dhcmVob3VzZT48cHJvZHVjdD5SVEstMDQjNzExMTAxLUwgICAgIDwvcHJvZHVjdD48L3NjaGVtZS5zdG9ja20+PC90YWJsZT4=</DocData>
</SendDocument>
I would like to know if it is a bug in axis, in which case I will open a bug in jira or the problem comes from an invalid WSDL (document/literal with soapenc types).
Thanks,
Daniel
Here is the wsdl:
<?xml version="1.0" encoding="utf-8" ?>
<definitions
elementFormDefault="qualified"
targetNamespace=" http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.wsdl"
xmlns:tns="http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.wsdl "
xmlns:sbs="http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.xsd"
xmlns:soap=" http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xs=" http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/" >
<types>
<xs:schema elementFormDefault="qualified" targetNamespace=" http://schemas.streamserve.com/xml/wsdl/servicebroker/4.1/services.xsd" >
<xs:import namespace=" http://www.w3.org/2001/XMLSchema" />
<xs:element name="SendDocument">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="ServiceDescription" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ServiceVersion" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ServerID" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="DocData" type="soap-enc:base64" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendReceiveDocument">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="ServiceDescription" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ServiceVersion" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="ServerID" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="DocData" type="soap-enc:base64" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendDocumentResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="SendDocumentResult" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendReceiveDocumentResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="SendReceiveDocumentResult" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="DocData" type="soap-enc:base64" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SendDocumentFault">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="ErrorCode" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="ErrorDescription" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<message name="SendDocumentIn">
<part name="parameters" element="sbs:SendDocument"/>
</message>
<message name="SendReceiveDocumentIn">
<part name="parameters" element="sbs:SendReceiveDocument"/>
</message>
<message name="SendDocumentOut">
<part name="parameters" element="sbs:SendDocumentResponse"/>
</message>
<message name="SendReceiveDocumentOut">
<part name="parameters" element="sbs:SendReceiveDocumentResponse"/>
</message>
<message name="SendDocumentFault">
<part name="parameters" element="sbs:SendDocumentFault"/>
</message>
<portType name="SendDocumentPortType">
<operation name="SendDocument">
<documentation>
Sends a document to ServiceBroker for processing.
ServiceDescription: The name of the service to execute.
ServiceVersion: The service version to use. This parameter can be empty, indicating that the latest registered service should be used.
DocData: A byte array with data sent to the service specified in ServiceDescription.
Return: Parameter reserved for future use.
</documentation>
<input message="tns:SendDocumentIn"/>
<output message="tns:SendDocumentOut"/>
<fault name="SendDocumentFault" message="tns:SendDocumentFault"/>
</operation>
</portType>
<portType name="SendReceiveDocumentPortType">
<operation name="SendReceiveDocument">
<documentation>
Sends a document to ServiceBroker for processing. The result will be returned to the caller.
ServiceDescription: The name of the service to execute.
ServiceVersion: The service version to use. This parameter can be empty, indicating that the latest registered service should be used.
DocData: [in] A byte array with data sent to the service specified in ServiceDescription. [out] A byte array with the result.
Return: Parameter reserved for future use.
</documentation>
<input message="tns:SendReceiveDocumentIn"/>
<output message="tns:SendReceiveDocumentOut"/>
<fault name="SendDocumentFault" message="tns:SendDocumentFault"/>
</operation>
</portType>
<binding name="SendDocumentSOAP" type="tns:SendDocumentPortType">
<soap:binding style="document" transport=" http://schemas.xmlsoap.org/soap/http"/>
<operation name="SendDocument">
<soap:operation soapAction=" http://www.streamserve.com/xml/soap/servicebroker/4.1/senddocument" style="document" />
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="SendDocumentFault">
<soap:fault name="SendDocumentFault" use="literal"/>
</fault>
</operation>
</binding>
<binding name="SendReceiveDocumentSOAP" type="tns:SendReceiveDocumentPortType">
<soap:binding style="document" transport=" http://schemas.xmlsoap.org/soap/http"/>
<operation name="SendReceiveDocument">
<soap:operation soapAction=" http://www.streamserve.com/xml/soap/servicebroker/4.1/sendreceivedocument" style="document" />
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="SendDocumentFault">
<soap:fault name="SendDocumentFault" use="literal"/>
</fault>
</operation>
</binding>
<service name="StreamServe ServiceBroker">
<documentation>StreamServe ServiceBroker SOAP services.</documentation>
<port name="SendDocumentPort" binding="tns:SendDocumentSOAP">
<soap:address location="http://localhost:1717"/>
</port>
<port name="SendReceiveDocumentPort" binding="tns:SendReceiveDocumentSOAP">
<soap:address location="http://localhost:1717"/>
</port>
</service>
</definitions>
- Axis 1.4 with soapenc:base64 Daniel Beland
- Re: Axis 1.4 with soapenc:base64 Anne Thomas Manes
- Re: Axis 1.4 with soapenc:base64 Daniel Beland
- Re: Axis 1.4 with soapenc:base64 Anne Thomas Manes
