Round4/GroupH/ComplexDoc

The standard WSDL description listed below can be found here. You can find additional information at the SOAP Builders round 4 site.

WSDL Interface

<?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>
                                                                           

Client

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();
    |   }
    }
}

Server

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.