Round2/GroupB

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.

WSDL Interface

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

Client

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

Server

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.