The standard WSDL description listed below can be found here. You can find additional information at the SOAP Builders round 4 site.
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://soapinterop.org/wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns2="http://soapinterop.org/types"
xmlns:ns3="http://soapinterop.org/types/part"
xmlns:ns4="http://soapinterop.org/types/requestresponse"
targetNamespace="http://soapinterop.org/wsdl">
<types>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://soapinterop.org/types"
targetNamespace="http://soapinterop.org/types">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="SOAPStruct">
<sequence>
<element name="varString" type="xsd:string"/>
<element name="varInt" type="xsd:int"/>
<element name="varFloat" type="xsd:float"/>
</sequence>
</complexType>
<complexType name="SOAPStructFault">
<sequence>
<element name="soapStruct" type="tns:SOAPStruct"/>
</sequence>
</complexType>
<complexType name="BaseStruct">
<sequence>
<element name="structMessage" type="tns:SOAPStruct"/>
<element name="shortMessage" type="xsd:short"/>
</sequence>
</complexType>
<complexType name="ExtendedStruct">
<complexContent>
<extension base="tns:BaseStruct">
<sequence>
<element name="stringMessage" type="xsd:string"/>
<element name="intMessage" type="xsd:int"/>
<element name="anotherIntMessage" type="xsd:int"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="MoreExtendedStruct">
<complexContent>
<extension base="tns:ExtendedStruct">
<sequence>
<element name="booleanMessage" type="xsd:boolean"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://soapinterop.org/types/part"
targetNamespace="http://soapinterop.org/types/part">
<element name="SOAPStructFaultPart" type="ns2:SOAPStructFault"/>
<element name="BaseStructPart" type="ns2:BaseStruct"/>
<element name="ExtendedStructPart" type="ns2:ExtendedStruct"/>
<element name="MoreExtendedStructPart" type="ns2:MoreExtendedStruct"/>
</schema>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://soapinterop.org/types/requestresponse"
targetNamespace="http://soapinterop.org/types/requestresponse">
<element name="echoSOAPStructFaultRequest" type="ns2:SOAPStruct"/>
<element name="echoSOAPStructFaultResponse">
<complexType/>
</element>
<element name="echoBaseStructFaultRequest" type="ns2:BaseStruct"/>
<element name="echoBaseStructFaultResponse">
<complexType/>
</element>
<element name="echoExtendedStructFaultRequest" type="ns2:ExtendedStruct"/>
<element name="echoExtendedStructFaultResponse">
<complexType/>
</element>
<element name="echoMultipleFaults1Request">
<complexType>
<sequence>
<element name="whichFault" type="xsd:int"/>
<element name="param1" type="ns2:SOAPStruct"/>
<element name="param2" type="ns2:BaseStruct"/>
</sequence>
</complexType>
</element>
<element name="echoMultipleFaults1Response">
<complexType/>
</element>
<element name="echoMultipleFaults2Request">
<complexType>
<sequence>
<element name="whichFault" type="xsd:int"/>
<element name="param1" type="ns2:BaseStruct"/>
<element name="param2" type="ns2:ExtendedStruct"/>
<element name="param3" type="ns2:MoreExtendedStruct"/>
</sequence>
</complexType>
</element>
<element name="echoMultipleFaults2Response">
<complexType/>
</element>
</schema>
</types>
<message name="echoSOAPStructFaultRequest">
<part name="param" element="ns4:echoSOAPStructFaultRequest"/>
</message>
<message name="echoSOAPStructFaultResponse">
<part name="param" element="ns4:echoSOAPStructFaultResponse"/>
</message>
<message name="echoBaseStructFaultRequest">
<part name="param" element="ns4:echoBaseStructFaultRequest"/>
</message>
<message name="echoBaseStructFaultResponse">
<part name="param" element="ns4:echoBaseStructFaultResponse"/>
</message>
<message name="echoExtendedStructFaultRequest">
<part name="param" element="ns4:echoExtendedStructFaultRequest"/>
</message>
<message name="echoExtendedStructFaultResponse">
<part name="param" element="ns4:echoExtendedStructFaultResponse"/>
</message>
<message name="echoMultipleFaults1Request">
<part name="param" element="ns4:echoMultipleFaults1Request"/>
</message>
<message name="echoMultipleFaults1Response">
<part name="param" element="ns4:echoMultipleFaults1Response"/>
</message>
<message name="echoMultipleFaults2Request">
<part name="param" element="ns4:echoMultipleFaults2Request"/>
</message>
<message name="echoMultipleFaults2Response">
<part name="param" element="ns4:echoMultipleFaults2Response"/>
</message>
<!-- Fault messages -->
<message name="SOAPStructFault">
<part name="part3" element="ns3:SOAPStructFaultPart"/>
</message>
<message name="BaseStructFault">
<part name="part1" element="ns3:BaseStructPart"/>
</message>
<message name="ExtendedStructFault">
<part name="part2" element="ns3:ExtendedStructPart"/>
</message>
<message name="MoreExtendedStructFault">
<part name="part5" element="ns3:MoreExtendedStructPart"/>
</message>
<portType name="ComplexDocLitPortType">
<!--
Throws a fault with an embedded SOAPStruct
-->
<operation name="echoSOAPStructFault" parameterOrder="">
<input message="tns:echoSOAPStructFaultRequest"/>
<output message="tns:echoSOAPStructFaultResponse"/>
<fault name="ComplexFault" message="tns:SOAPStructFault"/>
</operation>
<!--
Throws a fault with a base complex struct
-->
<operation name="echoBaseStructFault" parameterOrder="">
<input message="tns:echoBaseStructFaultRequest"/>
<output message="tns:echoBaseStructFaultResponse"/>
<fault name="ComplexFault" message="tns:BaseStructFault"/>
</operation>
<!--
Throws a fault with an en extended complex type
-->
<operation name="echoExtendedStructFault" parameterOrder="">
<input message="tns:echoExtendedStructFaultRequest"/>
<output message="tns:echoExtendedStructFaultResponse"/>
<fault name="ComplexFault" message="tns:ExtendedStructFault"/>
</operation>
<!--
Throws a fault with embedded complex type, fault with an
extended complex type and fault with an array of a base
complex type
-->
<operation name="echoMultipleFaults1" parameterOrder="param">
<input message="tns:echoMultipleFaults1Request"/>
<output message="tns:echoMultipleFaults1Response"/>
<fault name="ComplexFault1" message="tns:SOAPStructFault"/>
<fault name="ComplexFault2" message="tns:BaseStructFault"/>
</operation>
<!--
Throws a fault with an array of base complex type and
a fault with doubly extended complex type
-->
<operation name="echoMultipleFaults2" parameterOrder="param">
<input message="tns:echoMultipleFaults2Request"/>
<output message="tns:echoMultipleFaults2Response"/>
<fault name="ComplexFault1" message="tns:BaseStructFault"/>
<fault name="ComplexFault2" message="tns:ExtendedStructFault"/>
<fault name="ComplexFault3" message="tns:MoreExtendedStructFault"/>
</operation>
</portType>
<binding name="ComplexDocLitBinding" type="tns:ComplexDocLitPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="echoSOAPStructFault">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="ComplexFault">
<soap:fault
name="ComplexFault"
use="literal"/>
</fault>
<soap:operation soapAction=""/>
</operation>
<operation name="echoBaseStructFault">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="ComplexFault">
<soap:fault
name="ComplexFault"
use="literal"/>
</fault>
<soap:operation soapAction=""/>
</operation>
<operation name="echoExtendedStructFault">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="ComplexFault">
<soap:fault
name="ComplexFault"
use="literal"/>
</fault>
<soap:operation soapAction=""/>
</operation>
<operation name="echoMultipleFaults1">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="ComplexFault1">
<soap:fault
name="ComplexFault1"
use="literal"/>
</fault>
<fault name="ComplexFault2">
<soap:fault
name="ComplexFault2"
use="literal"/>
</fault>
<soap:operation soapAction=""/>
</operation>
<operation name="echoMultipleFaults2">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="ComplexFault1">
<soap:fault
name="ComplexFault1"
use="literal"/>
</fault>
<fault name="ComplexFault2">
<soap:fault
name="ComplexFault2"
use="literal"/>
</fault>
<fault name="ComplexFault3">
<soap:fault
name="ComplexFault3"
use="literal"/>
</fault>
<soap:operation soapAction=""/>
</operation>
</binding>
<service name="ComplexDocLitService">
<port name="ComplexDocLitPort" binding="tns:ComplexDocLitBinding">
<soap:address
location="http://soapinterop.novell.com/round4/grouph/complexdoc"/>
</port>
</service>
</definitions>
If you invoke wsdl2java on the above WSDL document, you can run this client to interact with the service:
package grouph.complexdoc;
import javax.naming.InitialContext;
import javax.xml.rpc.Stub;
public class Client
{
public static void main(String[] args) throws Exception
{
| InitialContext ctx = new InitialContext();
| ComplexDocLitService service = (ComplexDocLitService)
| ctx.lookup("xmlrpc:soap:grouph.complexdoc.ComplexDocLitService");
| ComplexDocLitPortType stub = service.getComplexDocLitPort();
|
| // set the end point address
| if (args.length > 0)
| ((Stub)stub)._setProperty("javax.xml.rpc.service.endpoint.address",
| args[0]);
|
| echoSOAPStructFault(stub);
| echoBaseStructFault(stub);
| echoExtendedStructFault(stub);
| echoMultipleFaults1(stub);
| echoMultipleFaults2(stub);
}
public static void echoSOAPStructFault(ComplexDocLitPortType stub)
{
| try
| {
| | System.out.print("echoSOAPStructFault: ");
| | boolean result = Tests.echoSOAPStructFault(stub);
| | System.out.println(result ? "OK" : "failed");
| }
| catch (java.lang.Exception ex)
| {
| | System.out.println("error invoking echoSOAPStructFault:" +
| | ex.getMessage());
| | if (java.lang.System.getProperty("DEBUG") != null)
| | ex.printStackTrace();
| }
}
public static void echoBaseStructFault(ComplexDocLitPortType stub)
{
| try
| {
| | System.out.print("echoBaseStructFault: ");
| | boolean result = Tests.echoBaseStructFault(stub);
| | System.out.println(result ? "OK" : "failed");
| }
| catch (java.lang.Exception ex)
| {
| | System.out.println("error invoking echoBaseStructFault:" +
| | ex.getMessage());
| | if (java.lang.System.getProperty("DEBUG") != null)
| | ex.printStackTrace();
| }
}
public static void echoExtendedStructFault(ComplexDocLitPortType stub)
{
| try
| {
| | System.out.print("echoExtendedStructFault: ");
| | boolean result = Tests.echoExtendedStructFault(stub);
| | System.out.println(result ? "OK" : "failed");
| }
| catch (java.lang.Exception ex)
| {
| | System.out.println("error invoking echoExtendedStructFault:" +
| | ex.getMessage());
| | if (java.lang.System.getProperty("DEBUG") != null)
| | ex.printStackTrace();
| }
}
public static void echoMultipleFaults1(ComplexDocLitPortType stub)
{
| try
| {
| | System.out.print("echoMultipleFaults1: ");
| | boolean result = Tests.echoMultipleFaults1(stub);
| | System.out.println(result ? "OK" : "failed");
| }
| catch (java.lang.Exception ex)
| {
| | System.out.println("error invoking echoMultipleFaults1:" +
| | ex.getMessage());
| | if (java.lang.System.getProperty("DEBUG") != null)
| | ex.printStackTrace();
| }
}
public static void echoMultipleFaults2(ComplexDocLitPortType stub)
{
| try
| {
| | System.out.print("echoMultipleFaults2: ");
| | boolean result = Tests.echoMultipleFaults2(stub);
| | System.out.println(result ? "OK" : "failed");
| }
| catch (java.lang.Exception ex)
| {
| | System.out.println("error invoking echoMultipleFaults2:" +
| | ex.getMessage());
| | if (java.lang.System.getProperty("DEBUG") != null)
| | ex.printStackTrace();
| }
}
}
An implementation of the service endpoint from the above WSDL is listed below:
// Thu Oct 03 12:38:40 PDT 2002
package grouph.complexdoc;
import javax.servlet.ServletException;
public class ServerImpl extends ComplexDocLitPortType_ServiceSkeleton
{
public void init()
throws ServletException
{
| super.init();
|
| // Set the WSDL file property
| _setProperty("xmlrpc.wsdl", "complex-doc-literal.wsdl");
}
public grouph.complexdoc.EchoSOAPStructFaultResponse echoSOAPStructFault(java.lang.String varString, int varInt, float varFloat)
throws SOAPStructFault, java.rmi.RemoteException
{
| throw new SOAPStructFault(new SOAPStruct(varString, varInt, varFloat));
}
public grouph.complexdoc.EchoBaseStructFaultResponse echoBaseStructFault(grouph.complexdoc.SOAPStruct structMessage, short shortMessage)
throws BaseStruct, java.rmi.RemoteException
{
| throw new BaseStruct(structMessage, shortMessage);
}
public EchoExtendedStructFaultResponse echoExtendedStructFault(
ExtendedStruct i0)
throws ExtendedStruct, java.rmi.RemoteException
{
| throw new ExtendedStruct(i0.getStructMessage(),
| i0.getShortMessage(), i0.getStringMessage(), i0.getIntMessage(),
| i0.getAnotherIntMessage());
}
public EchoMultipleFaults1Response echoMultipleFaults1(int i0,
SOAPStruct i1, grouph.complexdoc.BaseStruct i2)
throws BaseStruct, SOAPStructFault,
java.rmi.RemoteException
{
| if (i0 == 2) {
| | throw new BaseStruct(i2.getStructMessage(),
| | i2.getShortMessage());
| } else {
| | throw new SOAPStructFault(i1);
| }
}
public EchoMultipleFaults2Response echoMultipleFaults2(int i0,
grouph.complexdoc.BaseStruct i1,
grouph.complexdoc.ExtendedStruct i2,
grouph.complexdoc.MoreExtendedStruct i3)
throws MoreExtendedStruct, ExtendedStruct,
BaseStruct, java.rmi.RemoteException
{
| if (i0 == 2) {
| | ExtendedStruct t2 = i2;
| | throw new ExtendedStruct(t2.getStructMessage(),
| | t2.getShortMessage(), t2.getStringMessage(), t2.getIntMessage(),
| | t2.getAnotherIntMessage());
| } else if (i0 == 3) {
| | MoreExtendedStruct t3 = i3;
| | throw new MoreExtendedStruct(t3.getStructMessage(),
| | t3.getShortMessage(), t3.getStringMessage(), t3.getIntMessage(),
| | t3.getAnotherIntMessage(), t3.getBooleanMessage());
| } else {
| | BaseStruct t1 = i1;
| | throw new BaseStruct(t1.getStructMessage(),
| | t1.getShortMessage());
| }
}
}
Copyright © 2003, 2004 Novell, Inc. All rights reserved. Copyright © 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.