The specification document for the group B interoperability tests can be found here. The standard WSDL description listed below can be found here. You can find additional information at the SOAPBuilders Interoperability Lab's Round 2 page.
<?xml version="1.0" encoding="UTF-8"?> <definitions name="InteropTestB" targetNamespace="http://soapinterop.org/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://soapinterop.org/xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://soapinterop.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <types> <schema targetNamespace="http://soapinterop.org/xsd" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="ArrayOfstring"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="string[]"/> </restriction> </complexContent> </complexType> <complexType name="ArrayOfint"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/> </restriction> </complexContent> </complexType> <complexType name="ArrayOffloat"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="float[]"/> </restriction> </complexContent> </complexType> <complexType name="ArrayOfSOAPStruct"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="s:SOAPStruct[]"/> </restriction> </complexContent> </complexType> <complexType name="SOAPStruct"> <all> <element name="varString" type="string"/> <element name="varInt" type="int"/> <element name="varFloat" type="float"/> </all> </complexType> <complexType name="SOAPStructStruct"> <all> <element name="varString" type="string"/> <element name="varInt" type="int"/> <element name="varFloat" type="float"/> <element name="varStruct" type="s:SOAPStruct"/> </all> </complexType> <complexType name="SOAPArrayStruct"> <all> <element name="varString" type="string"/> <element name="varInt" type="int"/> <element name="varFloat" type="float"/> <element name="varArray" type="s:ArrayOfstring"/> </all> </complexType> <complexType name="ArrayOfString2D"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[,]"/> </restriction> </complexContent> </complexType> </schema> </types> <message name="echoStructAsSimpleTypesRequest"> <part name="inputStruct" type="s:SOAPStruct"/> </message> <message name="echoStructAsSimpleTypesResponse"> <part name="outputString" type="xsd:string"/> <part name="outputInteger" type="xsd:int"/> <part name="outputFloat" type="xsd:float"/> </message> <message name="echoSimpleTypesAsStructRequest"> <part name="inputString" type="xsd:string"/> <part name="inputInteger" type="xsd:int"/> <part name="inputFloat" type="xsd:float"/> </message> <message name="echoSimpleTypesAsStructResponse"> <part name="return" type="s:SOAPStruct"/> </message> <message name="echo2DStringArrayRequest"> <part name="input2DStringArray" type="s:ArrayOfString2D"/> </message> <message name="echo2DStringArrayResponse"> <part name="return" type="s:ArrayOfString2D"/> </message> <message name="echoNestedStructRequest"> <part name="inputStruct" type="s:SOAPStructStruct"/> </message> <message name="echoNestedStructResponse"> <part name="return" type="s:SOAPStructStruct"/> </message> <message name="echoNestedArrayRequest"> <part name="inputStruct" type="s:SOAPArrayStruct"/> </message> <message name="echoNestedArrayResponse"> <part name="return" type="s:SOAPArrayStruct"/> </message> <portType name="InteropTestPortTypeB"> <operation name="echoStructAsSimpleTypes" parameterOrder="inputStruct outputString outputInteger outputFloat"> <input message="tns:echoStructAsSimpleTypesRequest"/> <output message="tns:echoStructAsSimpleTypesResponse"/> </operation> <operation name="echoSimpleTypesAsStruct" parameterOrder="inputString inputInteger inputFloat"> <input message="tns:echoSimpleTypesAsStructRequest"/> <output message="tns:echoSimpleTypesAsStructResponse"/> </operation> <operation name="echo2DStringArray" parameterOrder="input2DStringArray"> <input message="tns:echo2DStringArrayRequest"/> <output message="tns:echo2DStringArrayResponse"/> </operation> <operation name="echoNestedStruct" parameterOrder="inputStruct"> <input message="tns:echoNestedStructRequest"/> <output message="tns:echoNestedStructResponse"/> </operation> <operation name="echoNestedArray" parameterOrder="inputStruct"> <input message="tns:echoNestedArrayRequest"/> <output message="tns:echoNestedArrayResponse"/> </operation> </portType> <binding name="InteropTestSoapBindingB" type="tns:InteropTestPortTypeB"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="echoStructAsSimpleTypes"> <soap:operation soapAction="http://soapinterop.org/"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </output> </operation> <operation name="echoSimpleTypesAsStruct"> <soap:operation soapAction="http://soapinterop.org/"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </output> </operation> <operation name="echo2DStringArray"> <soap:operation soapAction="http://soapinterop.org/"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </output> </operation> <operation name="echoNestedStruct"> <soap:operation soapAction="http://soapinterop.org/"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </output> </operation> <operation name="echoNestedArray"> <soap:operation soapAction="http://soapinterop.org/"/> <input> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </input> <output> <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soapinterop.org/" use="encoded"/> </output> </operation> </binding> </definitions>
If you invoke wsdl2java on the above WSDL document, you can run this client to interact with the service:
package groupb.interoptestb; import javax.naming.InitialContext; import javax.xml.rpc.Stub; // http://soap.4s4c.com/ilab/soap.asp // http://soap.4s4c.com/ilab2/soap.asp // http://nagoya.apache.org:5049/axis/services/echo // http://www.mssoapinterop.org/asmx/simpleB.asmx // http://soap-server.borland.com/WebServices/Interop/cgi-bin/InteropGroupB.exe/soap/InteropTestPortTypeB // http://easysoap.sourceforge.net/cgi-bin/interopserver // http://websrv.cs.fsu.edu/~engelen/interop2B.cgi // http://www.themindelectric.net:8005/glue/round2B // http://soap.bluestone.com/hpws/soap/EchoService // http://interop.xmlbus.com:7002/xmlbus/container/InteropTest/GroupBService/GroupBPort // http://demo.openlinksw.com:8890/Interop // http://soapinterop.java.sun.com:80/round2/groupb // http://soapclient.com/interop/InteropB.wsdl // http://soapinterop.simdb.com/round2B // http://www.whitemesa.net/interop/std/groupB public class Client { public static void main(String[] args) throws Exception { | InitialContext ctx = new InitialContext(); | InteropTestPortTypeBService service = (InteropTestPortTypeBService) | ctx.lookup("xmlrpc:soap:groupb.interoptestb.InteropTestPortTypeBService"); | InteropTestPortTypeB stub = service.getInteropTestPortTypeBPort(); | | // set the end point address | if (args.length > 0) | ((Stub)stub)._setProperty("javax.xml.rpc.service.endpoint.address", | args[0]); | | echoStructAsSimpleTypes(stub); | echoSimpleTypesAsStruct(stub); | echo2DStringArray(stub); | echoNestedStruct(stub); | echoNestedArray(stub); } public static void echoStructAsSimpleTypes(InteropTestPortTypeB stub) { | try | { | | System.out.print("echoStructAsSimpleTypes: "); | | boolean result = Tests.echoStructAsSimpleTypes(stub); | | System.out.println(result ? "OK" : "failed"); | } | catch (java.lang.Exception ex) | { | | System.out.println("error invoking echoStructAsSimpleTypes:" + | | ex.getMessage()); | | if (java.lang.System.getProperty("DEBUG") != null) | | ex.printStackTrace(); | } } public static void echoSimpleTypesAsStruct(InteropTestPortTypeB stub) { | try | { | | System.out.print("echoSimpleTypesAsStruct: "); | | boolean result = Tests.echoSimpleTypesAsStruct(stub); | | System.out.println(result ? "OK" : "failed"); | } | catch (java.lang.Exception ex) | { | | System.out.println("error invoking echoSimpleTypesAsStruct:" + | | ex.getMessage()); | | if (java.lang.System.getProperty("DEBUG") != null) | | ex.printStackTrace(); | } } public static void echo2DStringArray(InteropTestPortTypeB stub) { | try | { | | System.out.print("echo2DStringArray: "); | | boolean result = Tests.echo2DStringArray(stub); | | System.out.println(result ? "OK" : "failed"); | } | catch (java.lang.Exception ex) | { | | System.out.println("error invoking echo2DStringArray:" + | | ex.getMessage()); | | if (java.lang.System.getProperty("DEBUG") != null) | | ex.printStackTrace(); | } } public static void echoNestedStruct(InteropTestPortTypeB stub) { | try | { | | System.out.print("echoNestedStruct: "); | | boolean result = Tests.echoNestedStruct(stub); | | System.out.println(result ? "OK" : "failed"); | } | catch (java.lang.Exception ex) | { | | System.out.println("error invoking echoNestedStruct:" + | | ex.getMessage()); | | if (java.lang.System.getProperty("DEBUG") != null) | | ex.printStackTrace(); | } } public static void echoNestedArray(InteropTestPortTypeB stub) { | try | { | | System.out.print("echoNestedArray: "); | | boolean result = Tests.echoNestedArray(stub); | | System.out.println(result ? "OK" : "failed"); | } | catch (java.lang.Exception ex) | { | | System.out.println("error invoking echoNestedArray:" + | | 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 groupb.interoptestb; import java.rmi.Remote; import java.rmi.RemoteException; import javax.servlet.ServletException; import javax.xml.rpc.holders.*; import groupb.interoptestb.holders.*; public class ServerImpl extends InteropTestPortTypeB_ServiceSkeleton { public void init() throws ServletException { | super.init(); | | // Set the WSDL file property | _setProperty("xmlrpc.wsdl", "InteropTestB.wsdl"); } public void echoStructAsSimpleTypes(SOAPStruct inputStruct, StringHolder outputString, IntHolder outputInteger, FloatHolder outputFloat) throws RemoteException { | outputString.value = inputStruct.getVarString(); | outputFloat.value = inputStruct.getVarFloat(); | outputInteger.value = inputStruct.getVarInt(); } public SOAPStruct echoSimpleTypesAsStruct(String inputString, int inputInteger, float inputFloat) throws RemoteException { | SOAPStruct struct = new SOAPStruct(); | struct.setVarString(inputString); | struct.setVarInt(inputInteger); | struct.setVarFloat(inputFloat); | return struct; } public SOAPArrayStruct echoNestedArray(SOAPArrayStruct inputStruct) throws RemoteException { | return inputStruct; } public SOAPStructStruct echoNestedStruct(SOAPStructStruct inputStruct) throws RemoteException { | return inputStruct; } public String[][] echo2DStringArray(String[][] input2DStringArray) throws RemoteException { | return input2DStringArray; } }
Copyright © 2003, 2004 Novell, Inc. All rights reserved. Copyright © 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.