WSDL generated incorrectly?
elenthril Oct 29, 2009 2:26 AMHi,
I am using wstools from eclipse 3.5.1. and jboss-5.1.0.GA to generate a top-down webservice. It is generated from the following, I believe (syntacticly) correct, wsdl with <mime:multipartRelated> elements.
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com.lei.nl/modelAgent" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:lei="http://com.lei.nl/modelAgent" name="ModelAgentService" targetNamespace="http://com.lei.nl/modelAgent"> <wsdl:types> <xsd:schema xmlns:lei="http://com.lei.nl/modelAgent" targetNamespace="http://com.lei.nl/modelAgent" > <xsd:element name="ModelAgentRequest"> <xsd:complexType> <xsd:sequence> <xsd:element minOccurs="1" maxOccurs="1" name="modelType" type="xsd:string"/> <xsd:element minOccurs="1" maxOccurs="1" name="modelName" type="xsd:string"/> <xsd:element minOccurs="0" maxOccurs="unbounded" name="modelParameters" type="lei:ModelParameter"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ModelAgentResponse"> <xsd:complexType> <xsd:sequence> <xsd:element minOccurs="1" maxOccurs="1" name="returnCode" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="ModelParameter"> <xsd:sequence> <xsd:element minOccurs="1" name="parameterName" type="xsd:string"/> <xsd:element minOccurs="1" name="parameterValue" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="invokeRequestMsg"> <wsdl:part name="ModelAgentRequest" element="lei:ModelAgentRequest"/> <wsdl:part name="gdxAttachment" type="xsd:base64Binary"/> </wsdl:message> <wsdl:message name="invokeResponseMsg"> <wsdl:part name="ModelAgentResponse" element="lei:ModelAgentResponse"/> <wsdl:part name="gdxAttachment" type="xsd:base64Binary"/> </wsdl:message> <wsdl:portType name="ModelAgentService"> <wsdl:operation name="invoke"> <wsdl:input message="tns:invokeRequestMsg" name="invokeRequestMsg"/> <wsdl:output message="tns:invokeResponseMsg" name="invokeResponseMsg"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="ModelAgentServiceSOAP" type="tns:ModelAgentService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="invoke"> <soap:operation soapAction=""/> <wsdl:input name="invokeRequestMsg"> <mime:multipartRelated> <mime:part> <soap:body parts="ModelAgentRequest" use="literal"/> </mime:part> <mime:part> <mime:content part="gdxAttachment" type="application/octet-stream"/> </mime:part> </mime:multipartRelated> </wsdl:input> <wsdl:output name="invokeResponseMsg"> <mime:multipartRelated> <mime:part> <soap:body parts="ModelAgentResponse" use="literal"/> </mime:part> <mime:part> <mime:content part="gdxAttachment" type="application/octet-stream"/> </mime:part> </mime:multipartRelated> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="ModelAgentSOAPService"> <wsdl:port binding="tns:ModelAgentServiceSOAP" name="ModelAgentServiceSOAP"> <soap:address location="http://localhost:9080/ModelAgentWeb/services/ModelAgentServiceSOAP"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
All the classes are generated coorectly. However, the wsdl published by JBoss look like this
definitions name="ModelAgentService" targetNamespace="http://com.lei.nl/modelAgent" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://com.lei.nl/modelAgent" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://modelagent.lei.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <types> <xs:schema targetNamespace="http://com.lei.nl/modelAgent" version="1.0" xmlns:tns="http://com.lei.nl/modelAgent" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ModelAgentRequest"> <xs:complexType> <xs:sequence> <xs:element name="modelType" type="xs:string" /> <xs:element name="modelName" type="xs:string" /> <xs:element maxOccurs="unbounded" minOccurs="0" name="modelParameters" nillable="true" type="tns:ModelParameter" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ModelAgentResponse"> <xs:complexType> <xs:sequence> <xs:element name="returnCode" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="gdxAttachment" nillable="true" type="xs:base64Binary" /> <xs:complexType name="ModelParameter"> <xs:sequence> <xs:element name="parameterName" type="xs:string" /> <xs:element name="parameterValue" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema> </types> <message name="ModelAgentService_invoke"> <part element="ns1:gdxAttachment" name="gdxAttachment" /> </message> <message name="ModelAgentService_invokeResponse"> <part element="ns1:gdxAttachment" name="gdxAttachment" /> </message> <portType name="ModelAgentService"> <operation name="invoke" parameterOrder="ModelAgentRequest gdxAttachment"> <input message="ns1:ModelAgentService_invoke" /> <output message="ns1:ModelAgentService_invokeResponse" /> </operation> </portType> <binding name="ModelAgentServiceBinding" type="ns1:ModelAgentService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation name="invoke"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> </definitions>
What happened here is the first parts of the request and response messages are lost, and cannot therefore not be read a client.
Has anyone any idea what i am doing wrong?
Thnak you