Hi,
I am trying to use xfire to expose some beans as web services. Although
it works fine with my own client, I must also insure that the service
will be usable for client created with the jaxws RI. This means that the
generated wsdl have to be imported by Sun wsimport utility.
Unfortunately, this utility reports warnings because :
1) the namespace for the object is not bound. typically, a class called
Contact will correspond to an element ns1:Contact, but the namespace ns1
is not bound in the wsdl schema. (ns1 is bounded in the wsdl declaration
but not in the types schema)
2) the objects generated for exception are in another namespace (tns)
that is not bound.
3) the objects used for lists, such as ArrayOfContact, are not declared
anywhere.
So the wsdl is invalid.
Is there a way to insure that a valid wsdl will be generated ?
Thanks for any help
Pierre-Yves
the wsdl generated :
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://service.addbook.springapp.volgadev.com"
xmlns:tns="http://service.addbook.springapp.volgadev.com"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns1="http://domain.addbook.springapp.volgadev.com"
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 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://domain.addbook.springapp.volgadev.com">
<xsd:complexType name="Contact">
<xsd:sequence>
<xsd:element minOccurs="0" name="address" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="city" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="emailAddress" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="firstName" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="homePhone" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="id" type="xsd:long"/>
<xsd:element minOccurs="0" name="lastName" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="username" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="workPhone" nillable="true"
type="xsd:string"/>
<xsd:element minOccurs="0" name="zip" nillable="true"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ArrayOfContact">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="Contact" nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://service.addbook.springapp.volgadev.com">
<xsd:element name="deleteContact">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="deleteContactResponse">
<xsd:complexType/>
</xsd:element>
<xsd:complexType name="ContactNotFoundException">
<xsd:sequence>
<xsd:element minOccurs="0" name="contact" nillable="true"
type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ContactNotFoundException"
type="*tns:ContactNotFoundException*"/>
<xsd:element name="loadContacts">
<xsd:complexType/>
</xsd:element>
<xsd:element name="loadContactsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out"
nillable="true" type="*ns1:ArrayOfContact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="updateContact">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="updateContactResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="findContact">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0"
nillable="true" type="xsd:long"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="findContactResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="saveContact">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="saveContactResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out"
nillable="true" type="*ns1:Contact*"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="findContactRequest">
<wsdl:part name="parameters" element="tns:findContact">
</wsdl:part>
</wsdl:message>
<wsdl:message name="ContactNotFoundException">
<wsdl:part name="ContactNotFoundException"
element="tns:ContactNotFoundException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="deleteContactResponse">
<wsdl:part name="parameters" element="tns:deleteContactResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="deleteContactRequest">
<wsdl:part name="parameters" element="tns:deleteContact">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateContactResponse">
<wsdl:part name="parameters" element="tns:updateContactResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="loadContactsResponse">
<wsdl:part name="parameters" element="tns:loadContactsResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="saveContactResponse">
<wsdl:part name="parameters" element="tns:saveContactResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="loadContactsRequest">
<wsdl:part name="parameters" element="tns:loadContacts">
</wsdl:part>
</wsdl:message>
<wsdl:message name="saveContactRequest">
<wsdl:part name="parameters" element="tns:saveContact">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateContactRequest">
<wsdl:part name="parameters" element="tns:updateContact">
</wsdl:part>
</wsdl:message>
<wsdl:message name="findContactResponse">
<wsdl:part name="parameters" element="tns:findContactResponse">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="ContactServicePortType">
<wsdl:operation name="deleteContact">
<wsdl:input name="deleteContactRequest"
message="tns:deleteContactRequest">
</wsdl:input>
<wsdl:output name="deleteContactResponse"
message="tns:deleteContactResponse">
</wsdl:output>
<wsdl:fault name="ContactNotFoundException"
message="tns:ContactNotFoundException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="loadContacts">
<wsdl:input name="loadContactsRequest"
message="tns:loadContactsRequest">
</wsdl:input>
<wsdl:output name="loadContactsResponse"
message="tns:loadContactsResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="updateContact">
<wsdl:input name="updateContactRequest"
message="tns:updateContactRequest">
</wsdl:input>
<wsdl:output name="updateContactResponse"
message="tns:updateContactResponse">
</wsdl:output>
<wsdl:fault name="ContactNotFoundException"
message="tns:ContactNotFoundException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="findContact">
<wsdl:input name="findContactRequest"
message="tns:findContactRequest">
</wsdl:input>
<wsdl:output name="findContactResponse"
message="tns:findContactResponse">
</wsdl:output>
<wsdl:fault name="ContactNotFoundException"
message="tns:ContactNotFoundException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="saveContact">
<wsdl:input name="saveContactRequest"
message="tns:saveContactRequest">
</wsdl:input>
<wsdl:output name="saveContactResponse"
message="tns:saveContactResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ContactServiceHttpBinding"
type="tns:ContactServicePortType">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="deleteContact">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="deleteContactRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="deleteContactResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ContactNotFoundException">
<wsdlsoap:fault name="ContactNotFoundException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="loadContacts">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="loadContactsRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="loadContactsResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="updateContact">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="updateContactRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="updateContactResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ContactNotFoundException">
<wsdlsoap:fault name="ContactNotFoundException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="findContact">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="findContactRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="findContactResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ContactNotFoundException">
<wsdlsoap:fault name="ContactNotFoundException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="saveContact">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="saveContactRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="saveContactResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ContactService">
<wsdl:port name="ContactServiceHttpPort"
binding="tns:ContactServiceHttpBinding">
<wsdlsoap:address
location="http://localhost:8081/addbook/xfire/ContactWS"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>