When using Document style services (which you are), you must reference an element definition in the <part> definition (which you did). When using RPC style services, you must reference a type definition instead.
The ws:filesystem/file element definition looks okay (although I suspect that you really want to use a <choice> group rather than a <sequence> structure -- or perhaps you want to define an enumeration).
Anne
At 10:16 PM 2/3/2004, you wrote:
Hi, [apologies for the length]
I have read through the docs and spec but I am still unclear on a few things. The samples all work and all is well.
I have created a wsdl file and use the ant task to generate java files, then compile and deploy -- everything works so far. I must be building the wsdl (pasted at the bottom) incorrectly and I don't know enough to see the error (any suggestions on books, websites are greatly appreciated).
In looking at the code I must be doing something wrong with the //message/part element. Am I right to think I can put an element reference there? An example of the request - GetHeadRequest (coming from a .NET client) looks like:
<?xml version="1.0" encoding="ISO-8859-1"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<wd:head xmlns:wd="http://xstandard.com/2002/webdir">
<wd:lang>en</wd:lang>
</wd:head>
</env:Body>
</env:Envelope>
and the response - GetHeadResponse looks like: <?xml version="1.0" encoding="UTF-16"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <wd:filesystem xmlns:wd="http://xstandard.com/2002/webdir"> <wd:parent></wd:parent> <wd:name>Library Of Images & Attachments</wd:name> <wd:description></wd:description> </wd:filesystem> </env:Body> </env:Envelope>
I go the AxisServlet and list available service -- the new service is there. But when I hit the wsdl to see a 'roundtrip' of the schema I get the following error:
AXIS error
Sorry, something seems to have gone wrong... here are the details:
Fault - makeTypeElement() was told to create a type "{http://xstandard.com/2002/webdir}>filesystem>file", with no containing element
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: makeTypeElement() was told to create a type "{http://xstandard.com/2002/webdir}>filesystem>file", with no containing element
faultActor:
faultNode:
faultDetail:
-------------------------
The wsdl is:
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wd="http://xstandard.com/2002/webdir" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:y="http://new.webservice.namespace" targetNamespace="http://xstandard.com/2002/webdir" name="WebDir">
<types>
<xs:schema targetNamespace="http://xstandard.com/2002/webdir">
<!--
-->
<xs:element name="filesystem">
<xs:complexType>
<xs:sequence>
<xs:element name="parent"/>
<xs:element ref="wd:name"/>
<xs:element name="description"/>
<xs:element name="folder" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="wd:name"/>
<xs:element ref="wd:path"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="file" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="gif" type="wd:ImageFile"/>
<xs:element name="jpg" type="wd:ImageFile"/>
<xs:element name="png" type="wd:ImageFile"/>
<xs:element name="bmp" type="wd:ImageFile"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--
-->
<xs:element name="name"/>
<xs:element name="path"/>
<xs:element name="lang"/>
<!--
-->
<xs:complexType name="GenericFile">
<xs:sequence>
<xs:element ref="wd:name"/>
<xs:element name="title"/>
<xs:element ref="wd:path"/>
<xs:element name="dlm"/>
</xs:sequence>
</xs:complexType>
<!--
-->
<xs:complexType name="ImageFile">
<xs:complexContent>
<xs:extension base="wd:GenericFile">
<xs:sequence>
<xs:element name="width"/>
<xs:element name="height"/>
<xs:element name="alt"/>
<xs:element name="longdesc"/>
<xs:element name="decorative"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
-->
<xs:element name="head" type="wd:SoapRequest"/>
<!--
-->
<xs:element name="dir" type="wd:SoapRequest"/>
<!--
-->
<xs:complexType name="SoapRequest">
<xs:sequence>
<xs:element ref="wd:lang"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</types>
<!--
-->
<message name="GetHeadRequest">
<part name="body" element="wd:head"/>
</message>
<message name="GetHeadResponse">
<part name="body" element="wd:filesystem"/>
</message>
<!--
-->
<message name="GetDirRequest">
<part name="body" element="wd:dir"/>
</message>
<message name="GetDirResponse">
<part name="body" element="wd:filesystem"/>
</message>
<!--
-->
<portType name="WebDirPortType">
<operation name="GetHead">
<input message="wd:GetHeadRequest" name="GetHeadRequest"/>
<output message="wd:GetHeadResponse" name="GetHeadResponse"/>
</operation>
<operation name="GetDir">
<input message="wd:GetDirRequest" name="GetDirRequest"/>
<output message="wd:GetDirResponse" name="GetDirResponse"/>
</operation>
</portType>
<!--
-->
<binding name="WebDirSoapBinding" type="wd:WebDirPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetHead">
<soap:operation soapAction="http://localhost:8080/services/GetHead"/>
<input name="GetHeadRequest">
<soap:body use="literal"/>
</input>
<output name="GetHeadResponse">
<soap:body use="literal"/>
</output>
</operation>
<operation name="GetDir">
<soap:operation soapAction="http://localhost:8080/lsb/services/GetDir"/>
<input name="GetDirRequest">
<soap:body use="literal"/>
</input>
<output name="GetDirResponse">
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="WebDirPortTypeService">
<documentation>A service to show file system assets.</documentation>
<port name="WebDirPortType" binding="wd:WebDirSoapBinding">
<soap:address location="http://localhost:8080/lsb/services/WebDirPortType"/>
</port>
</service>
</definitions>
~~~~~~~~~~~~~~~~~~
Anne Thomas Manes
VP & Research Director
Burton Group