You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by "frederic.dreyfus" <fr...@sungard.com> on 2006/04/27 10:36:29 UTC

WSDL Generation with SOAP binding

Hi,

I am trying to expose Web Services using the the soap binding and XFire
annotations.
I can send soap messages and get the response without any problem, but when
it comes to create a client from the generated WSDL (with .NET tools for
instance), I get error messages telling me there is a namespace problem.
I have been using XFire as a SOAP stack for some time and the WSDL it
generates takes directly my parameter in the message instead of encapsulate
it in another Response or Request structure (cf. wsdl:part of the WSDL).
I included below the WSDL generated with servicemix and the one generated
with XFire.

Cheers,

Frederic

WSDL generated using servicemix :
  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://com.sims.ts/test"
xmlns:tns="http://com.sims.ts/test"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns1="http://soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <xsd:schema attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace="http://soap"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:complexType name="Id">
- <xsd:sequence>
  <xsd:element minOccurs="0" name="extId" nillable="true" type="xsd:string"
/> 
  <xsd:element minOccurs="0" name="id" nillable="true" type="xsd:string" /> 
  <xsd:element minOccurs="0" name="partnerId" nillable="true"
type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
  </xsd:schema>
- <xsd:schema attributeFormDefault="qualified"
elementFormDefault="qualified" targetNamespace="http://com.sims.ts/test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="getMyBroker">
- <xsd:complexType>
- <xsd:sequence>
  <xsd:element maxOccurs="1" minOccurs="1" name="brokerId" nillable="true"
type="ns1:Id" /> 
  </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
- <xsd:element name="getMyBrokerResponse">
- <xsd:complexType>
- <xsd:sequence>
  <xsd:element maxOccurs="1" minOccurs="1" name="getBrokerResult"
nillable="true" type="xsd:string" /> 
  </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
  </xsd:schema>
  </wsdl:types>
- <wsdl:message name="getMyBrokerResponse">
  <wsdl:part name="parameters" element="tns:getMyBrokerResponse" /> 
  </wsdl:message>
- <wsdl:message name="getMyBrokerRequest">
  <wsdl:part name="parameters" element="tns:getMyBroker" /> 
  </wsdl:message>
- <wsdl:portType name="brokerServicePortType">
- <wsdl:operation name="getMyBroker">
  <wsdl:input name="getMyBrokerRequest" message="tns:getMyBrokerRequest" /> 
  <wsdl:output name="getMyBrokerResponse" message="tns:getMyBrokerResponse"
/> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="brokerServiceBinding"
type="tns:brokerServicePortType">
  <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getMyBroker">
- <wsdl:input name="getMyBrokerRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getMyBrokerResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="brokerService">
- <wsdl:port name="brokerService" binding="tns:brokerServiceBinding">
  <wsdlsoap:address location="http://localhost:8192/BrokerService/" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


WSDL generated with XFire :
  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns1="http://mybeans.ts.sims.com"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
xmlns:tns="http://com.sims.ts.ws.broker/v1.0"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://com.sims.ts.ws.broker/v1.0">
- <wsdl:types>
- <xsd:schema targetNamespace="http://com.sims.ts.ws.broker/v1.0"
elementFormDefault="qualified" attributeFormDefault="qualified">
  <xsd:element name="brokerId" type="xsd:string" /> 
  <xsd:element name="getBrokerResult" type="ns1:Broker" /> 
  </xsd:schema>
- <xsd:schema targetNamespace="http://mybeans.ts.sims.com"
elementFormDefault="qualified" attributeFormDefault="qualified">
- <xsd:complexType name="Broker">
- <xsd:sequence>
  <xsd:element name="country" type="ns1:Country" minOccurs="0" /> 
  <xsd:element name="id" type="ns1:Id" minOccurs="0" nillable="true" /> 
  <xsd:element name="name" type="xsd:string" minOccurs="0" nillable="true"
/> 
  </xsd:sequence>
  </xsd:complexType>
- <xsd:complexType name="Id">
- <xsd:sequence>
  <xsd:element name="extId" type="xsd:string" minOccurs="0" nillable="true"
/> 
  <xsd:element name="id" type="xsd:string" minOccurs="0" nillable="true" /> 
  <xsd:element name="partnerId" type="xsd:string" minOccurs="0"
nillable="true" /> 
  </xsd:sequence>
  </xsd:complexType>
- <xsd:simpleType name="Country">
- <xsd:restriction base="xsd:string">
  <xsd:enumeration value="FRANCE" /> 
  <xsd:enumeration value="USA" /> 
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:schema>
  </wsdl:types>
- <wsdl:message name="getBrokerRequest">
  <wsdl:part element="tns:brokerId" name="brokerId" /> 
  </wsdl:message>
- <wsdl:message name="getBrokerResponse">
  <wsdl:part element="tns:getBrokerResult" name="getBrokerResult" /> 
  </wsdl:message>
- <wsdl:portType name="BrokerServiceIF">
- <wsdl:operation name="getBroker">
  <wsdl:input message="tns:getBrokerRequest" name="getBrokerRequest" /> 
  <wsdl:output message="tns:getBrokerResponse" name="getBrokerResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="BrokerServiceHttpBinding" type="tns:BrokerServiceIF">
  <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="getBroker">
  <wsdlsoap:operation soapAction="urn:BrokerId" /> 
- <wsdl:input name="getBrokerRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="getBrokerResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="BrokerService">
- <wsdl:port binding="tns:BrokerServiceHttpBinding"
name="BrokerServiceHttpPort">
  <wsdlsoap:address
location="http://localhost:8080/xfire-annotations/services/BrokerService" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>


--
View this message in context: http://www.nabble.com/WSDL-Generation-with-SOAP-binding-t1516728.html#a4116768
Sent from the ServiceMix - User forum at Nabble.com.


Re: WSDL Generation with SOAP binding

Posted by "frederic.dreyfus" <fr...@sungard.com>.
Guillaume,

Thanks for your answer.
I tried the generated servicemix WSDL with an axis client generator and it
worked perfectly.
It seems the .NET tool messed up with the namespaces, maybe because the
element name "getMyBrokerResponse" and the message name
"getMyBrokerResponse" are the same.

I'm still wondering why it generates a getMyBrokerResponse element that
holds my result whereas the getMyBrokerRequest message holds directly my
"getMyBroker" structure.

Fred
--
View this message in context: http://www.nabble.com/WSDL-Generation-with-SOAP-binding-t1516728.html#a4119217
Sent from the ServiceMix - User forum at Nabble.com.


Re: WSDL Generation with SOAP binding

Posted by Guillaume Nodet <gn...@gmail.com>.
JBI is targeted to WSDL 2 which does not have message part, so the
wsdl generated for ServiceMix has only one part named parameters
(which includes all the parameters) instead of having one message part
for each parameter.
Both WSDL seems valid..
Do you have more informations on your namespace problem ? Also you
should try to generate your client stuff with axis and see if the same
error occurs.

Cheers,
Guillaume Nodet

On 4/27/06, frederic.dreyfus <fr...@sungard.com> wrote:
>
> Hi,
>
> I am trying to expose Web Services using the the soap binding and XFire
> annotations.
> I can send soap messages and get the response without any problem, but when
> it comes to create a client from the generated WSDL (with .NET tools for
> instance), I get error messages telling me there is a namespace problem.
> I have been using XFire as a SOAP stack for some time and the WSDL it
> generates takes directly my parameter in the message instead of encapsulate
> it in another Response or Request structure (cf. wsdl:part of the WSDL).
> I included below the WSDL generated with servicemix and the one generated
> with XFire.
>
> Cheers,
>
> Frederic
>
> WSDL generated using servicemix :
>   <?xml version="1.0" encoding="UTF-8" ?>
> - <wsdl:definitions targetNamespace="http://com.sims.ts/test"
> xmlns:tns="http://com.sims.ts/test"
> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
> xmlns:ns1="http://soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
> xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
> - <wsdl:types>
> - <xsd:schema attributeFormDefault="qualified"
> elementFormDefault="qualified" targetNamespace="http://soap"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> - <xsd:complexType name="Id">
> - <xsd:sequence>
>   <xsd:element minOccurs="0" name="extId" nillable="true" type="xsd:string"
> />
>   <xsd:element minOccurs="0" name="id" nillable="true" type="xsd:string" />
>   <xsd:element minOccurs="0" name="partnerId" nillable="true"
> type="xsd:string" />
>   </xsd:sequence>
>   </xsd:complexType>
>   </xsd:schema>
> - <xsd:schema attributeFormDefault="qualified"
> elementFormDefault="qualified" targetNamespace="http://com.sims.ts/test"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> - <xsd:element name="getMyBroker">
> - <xsd:complexType>
> - <xsd:sequence>
>   <xsd:element maxOccurs="1" minOccurs="1" name="brokerId" nillable="true"
> type="ns1:Id" />
>   </xsd:sequence>
>   </xsd:complexType>
>   </xsd:element>
> - <xsd:element name="getMyBrokerResponse">
> - <xsd:complexType>
> - <xsd:sequence>
>   <xsd:element maxOccurs="1" minOccurs="1" name="getBrokerResult"
> nillable="true" type="xsd:string" />
>   </xsd:sequence>
>   </xsd:complexType>
>   </xsd:element>
>   </xsd:schema>
>   </wsdl:types>
> - <wsdl:message name="getMyBrokerResponse">
>   <wsdl:part name="parameters" element="tns:getMyBrokerResponse" />
>   </wsdl:message>
> - <wsdl:message name="getMyBrokerRequest">
>   <wsdl:part name="parameters" element="tns:getMyBroker" />
>   </wsdl:message>
> - <wsdl:portType name="brokerServicePortType">
> - <wsdl:operation name="getMyBroker">
>   <wsdl:input name="getMyBrokerRequest" message="tns:getMyBrokerRequest" />
>   <wsdl:output name="getMyBrokerResponse" message="tns:getMyBrokerResponse"
> />
>   </wsdl:operation>
>   </wsdl:portType>
> - <wsdl:binding name="brokerServiceBinding"
> type="tns:brokerServicePortType">
>   <wsdlsoap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http" />
> - <wsdl:operation name="getMyBroker">
> - <wsdl:input name="getMyBrokerRequest">
>   <wsdlsoap:body use="literal" />
>   </wsdl:input>
> - <wsdl:output name="getMyBrokerResponse">
>   <wsdlsoap:body use="literal" />
>   </wsdl:output>
>   </wsdl:operation>
>   </wsdl:binding>
> - <wsdl:service name="brokerService">
> - <wsdl:port name="brokerService" binding="tns:brokerServiceBinding">
>   <wsdlsoap:address location="http://localhost:8192/BrokerService/" />
>   </wsdl:port>
>   </wsdl:service>
>   </wsdl:definitions>
>
>
> WSDL generated with XFire :
>   <?xml version="1.0" encoding="UTF-8" ?>
> - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:ns1="http://mybeans.ts.sims.com"
> xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
> xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
> xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding"
> xmlns:tns="http://com.sims.ts.ws.broker/v1.0"
> xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://com.sims.ts.ws.broker/v1.0">
> - <wsdl:types>
> - <xsd:schema targetNamespace="http://com.sims.ts.ws.broker/v1.0"
> elementFormDefault="qualified" attributeFormDefault="qualified">
>   <xsd:element name="brokerId" type="xsd:string" />
>   <xsd:element name="getBrokerResult" type="ns1:Broker" />
>   </xsd:schema>
> - <xsd:schema targetNamespace="http://mybeans.ts.sims.com"
> elementFormDefault="qualified" attributeFormDefault="qualified">
> - <xsd:complexType name="Broker">
> - <xsd:sequence>
>   <xsd:element name="country" type="ns1:Country" minOccurs="0" />
>   <xsd:element name="id" type="ns1:Id" minOccurs="0" nillable="true" />
>   <xsd:element name="name" type="xsd:string" minOccurs="0" nillable="true"
> />
>   </xsd:sequence>
>   </xsd:complexType>
> - <xsd:complexType name="Id">
> - <xsd:sequence>
>   <xsd:element name="extId" type="xsd:string" minOccurs="0" nillable="true"
> />
>   <xsd:element name="id" type="xsd:string" minOccurs="0" nillable="true" />
>   <xsd:element name="partnerId" type="xsd:string" minOccurs="0"
> nillable="true" />
>   </xsd:sequence>
>   </xsd:complexType>
> - <xsd:simpleType name="Country">
> - <xsd:restriction base="xsd:string">
>   <xsd:enumeration value="FRANCE" />
>   <xsd:enumeration value="USA" />
>   </xsd:restriction>
>   </xsd:simpleType>
>   </xsd:schema>
>   </wsdl:types>
> - <wsdl:message name="getBrokerRequest">
>   <wsdl:part element="tns:brokerId" name="brokerId" />
>   </wsdl:message>
> - <wsdl:message name="getBrokerResponse">
>   <wsdl:part element="tns:getBrokerResult" name="getBrokerResult" />
>   </wsdl:message>
> - <wsdl:portType name="BrokerServiceIF">
> - <wsdl:operation name="getBroker">
>   <wsdl:input message="tns:getBrokerRequest" name="getBrokerRequest" />
>   <wsdl:output message="tns:getBrokerResponse" name="getBrokerResponse" />
>   </wsdl:operation>
>   </wsdl:portType>
> - <wsdl:binding name="BrokerServiceHttpBinding" type="tns:BrokerServiceIF">
>   <wsdlsoap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http" />
> - <wsdl:operation name="getBroker">
>   <wsdlsoap:operation soapAction="urn:BrokerId" />
> - <wsdl:input name="getBrokerRequest">
>   <wsdlsoap:body use="literal" />
>   </wsdl:input>
> - <wsdl:output name="getBrokerResponse">
>   <wsdlsoap:body use="literal" />
>   </wsdl:output>
>   </wsdl:operation>
>   </wsdl:binding>
> - <wsdl:service name="BrokerService">
> - <wsdl:port binding="tns:BrokerServiceHttpBinding"
> name="BrokerServiceHttpPort">
>   <wsdlsoap:address
> location="http://localhost:8080/xfire-annotations/services/BrokerService" />
>   </wsdl:port>
>   </wsdl:service>
>   </wsdl:definitions>
>
>
> --
> View this message in context: http://www.nabble.com/WSDL-Generation-with-SOAP-binding-t1516728.html#a4116768
> Sent from the ServiceMix - User forum at Nabble.com.
>
>