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" targetNamespace="http://soapinterop.org/wsdl"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://soapinterop.org/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 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="floatMessage" type="xsd:float"/> <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> </types> <message name="echoFaultResponse"/> <message name="echoSOAPStructFaultRequest"> <part name="param" type="ns2:SOAPStructFault"/> </message> <message name="echoBaseStructFaultRequest"> <part name="param" type="ns2:BaseStruct"/> </message> <message name="echoExtendedStructFaultRequest"> <part name="param" type="ns2:ExtendedStruct"/> </message> <message name="echoMultipleFaults1Request"> <part name="whichFault" type="xsd:int"/> <part name="param1" type="ns2:SOAPStruct"/> <part name="param2" type="ns2:BaseStruct"/> </message> <message name="echoMultipleFaults2Request"> <part name="whichFault" type="xsd:int"/> <part name="param1" type="ns2:BaseStruct"/> <part name="param2" type="ns2:ExtendedStruct"/> <part name="param3" type="ns2:MoreExtendedStruct"/> </message> <!-- Fault messages --> <message name="SOAPStructFault"> <part name="part1" type="ns2:SOAPStructFault"/> </message> <message name="BaseStructFault"> <part name="part2" type="ns2:BaseStruct"/> </message> <message name="ExtendedStructFault"> <part name="part3" type="ns2:ExtendedStruct"/> </message> <message name="MoreExtendedStructFault"> <part name="part4" type="ns2:MoreExtendedStruct"/> </message> <portType name="ComplexRpcEncPortType"> <!-- Throws a fault with an embedded SOAPStruct --> <operation name="echoSOAPStructFault" parameterOrder="param"> <input message="tns:echoSOAPStructFaultRequest"/> <output message="tns:echoFaultResponse"/> <fault name="ComplexFault" message="tns:SOAPStructFault"/> </operation> <!-- Throws a fault with a base complex struct --> <operation name="echoBaseStructFault" parameterOrder="param"> <input message="tns:echoBaseStructFaultRequest"/> <output message="tns:echoFaultResponse"/> <fault name="ComplexFault" message="tns:BaseStructFault"/> </operation> <!-- Throws a fault with an en extended complex type --> <operation name="echoExtendedStructFault" parameterOrder="param"> <input message="tns:echoExtendedStructFaultRequest"/> <output message="tns:echoFaultResponse"/> <fault name="ComplexFault" message="tns:ExtendedStructFault"/> </operation> <!-- Throws a fault with embedded complex type and fault with another complex type --> <operation name="echoMultipleFaults1" parameterOrder="whichFault param1 param2"> <input message="tns:echoMultipleFaults1Request"/> <output message="tns:echoFaultResponse"/> <fault name="ComplexFault1" message="tns:SOAPStructFault"/> <fault name="ComplexFault2" message="tns:BaseStructFault"/> </operation> <!-- Throws a fault with base complex type, fault with an extended complex type and a fault with doubly extended complex type --> <operation name="echoMultipleFaults2" parameterOrder="whichFault param1 param2 param3"> <input message="tns:echoMultipleFaults2Request"/> <output message="tns:echoFaultResponse"/> <fault name="ComplexFault1" message="tns:BaseStructFault"/> <fault name="ComplexFault2" message="tns:ExtendedStructFault"/> <fault name="ComplexFault3" message="tns:MoreExtendedStructFault"/> </operation> </portType> <binding name="ComplexRpcEncBinding" type="tns:ComplexRpcEncPortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> <operation name="echoSOAPStructFault"> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </output> <fault name="ComplexFault"> <soap:fault name="ComplexFault" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <soap:operation soapAction=""/> </operation> <operation name="echoBaseStructFault"> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </output> <fault name="ComplexFault"> <soap:fault name="ComplexFault" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <soap:operation soapAction=""/> </operation> <operation name="echoExtendedStructFault"> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </output> <fault name="ComplexFault"> <soap:fault name="ComplexFault" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <soap:operation soapAction=""/> </operation> <operation name="echoMultipleFaults1"> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </output> <fault name="ComplexFault1"> <soap:fault name="ComplexFault1" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <fault name="ComplexFault2"> <soap:fault name="ComplexFault2" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <soap:operation soapAction=""/> </operation> <operation name="echoMultipleFaults2"> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </output> <fault name="ComplexFault1"> <soap:fault name="ComplexFault1" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <fault name="ComplexFault2"> <soap:fault name="ComplexFault2" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <fault name="ComplexFault3"> <soap:fault name="ComplexFault3" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://soapinterop.org/wsdl"/> </fault> <soap:operation soapAction=""/> </operation> </binding> <service name="ComplexRpcEncService"> <port name="ComplexRpcEncPort" binding="tns:ComplexRpcEncBinding"> <soap:address location="http://soapinterop.novell.com/round4/grouph/complexrpc"/> </port> </service> </definitions>
If you invoke wsdl2java on the above WSDL document, you can run this client to interact with the service:
package grouph.complexrpc; import javax.naming.InitialContext; import javax.xml.rpc.Stub; public class Client { public static void main(String[] args) throws Exception { | InitialContext ctx = new InitialContext(); | ComplexRpcEncService service = (ComplexRpcEncService) | ctx.lookup("xmlrpc:soap:grouph.complexrpc.ComplexRpcEncService"); | ComplexRpcEncPortType stub = service.getComplexRpcEncPort(); | | // 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(ComplexRpcEncPortType 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(ComplexRpcEncPortType 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(ComplexRpcEncPortType 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(ComplexRpcEncPortType 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(ComplexRpcEncPortType 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.complexrpc; import javax.servlet.ServletException; public class ServerImpl extends ComplexRpcEncPortType_ServiceSkeleton { public void init() throws ServletException { | super.init(); | | // Set the WSDL file property | _setProperty("xmlrpc.wsdl", "complex-rpc-encoded.wsdl"); } public void echoSOAPStructFault(SOAPStructFault i0) throws SOAPStructFault, java.rmi.RemoteException { | throw new SOAPStructFault(i0.getSoapStruct()); } public void echoBaseStructFault(BaseStruct i0) throws BaseStruct, java.rmi.RemoteException { | throw new BaseStruct(i0.getFloatMessage(), | i0.getShortMessage()); } public void echoExtendedStructFault(ExtendedStruct i0) throws ExtendedStruct, java.rmi.RemoteException { | throw new ExtendedStruct(i0.getFloatMessage(), | i0.getShortMessage(), i0.getStringMessage(), | i0.getIntMessage(), i0.getAnotherIntMessage()); } public void echoMultipleFaults1(int i0, SOAPStruct i1, BaseStruct i2) throws BaseStruct, SOAPStructFault, java.rmi.RemoteException { | if (i0 == 2) { | | throw new BaseStruct(i2.getFloatMessage(), | | i2.getShortMessage()); | } else { | | throw new SOAPStructFault(i1); | } } public void echoMultipleFaults2(int i0, BaseStruct i1, ExtendedStruct i2, MoreExtendedStruct i3) throws MoreExtendedStruct, ExtendedStruct, BaseStruct, java.rmi.RemoteException { | if (i0 == 2) { | | throw new ExtendedStruct(i2.getFloatMessage(), | | i2.getShortMessage(), i2.getStringMessage(), | | i2.getIntMessage(), i2.getAnotherIntMessage()); | } else if (i0 == 3) { | | throw new MoreExtendedStruct(i3.getFloatMessage(), | | i3.getShortMessage(), i3.getStringMessage(), | | i3.getIntMessage(), i3.getAnotherIntMessage(), | | i3.getBooleanMessage()); | } else { | | throw new BaseStruct(i1.getFloatMessage(), | | i1.getShortMessage()); | } } }
Copyright © 2003, 2004 Novell, Inc. All rights reserved. Copyright © 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.