You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by Kailash Aynor <ka...@hotmail.com> on 2000/08/10 09:34:46 UTC

Re: Array of objects serialization...

here is the modified code.I tweaked the Addressbook Sample to test this. The 
following changes have been made to the Addressbook class. Function
public String[] reverse(String[] strArray) has been added to the class. Here 
is function body.
Essentially it takes an array of string, reverse every 2 Strings and sends 
it back.

public static String[] reverse(String[] strArray)
  {
    int len = strArray.length;
    for(int i =0; i < len; i++)
    {
        if (i+1 < len)
        {
            String tmp = strArray[i];
            strArray[i] = new String(strArray[i+1]);
            strArray[i+1] = new String(tmp);
            i++;
        }
    }
    return strArray;
  }

You need to add this "reverse" function in the deployment-descriptor.xml

and the client code to test this out is as follows. I have hardcoded  the 
router address. Change it accordingly.


import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;


public class test
{
  public static void main(String[] args) throws Exception
  {
    String encodingStyleURI = Constants.NS_URI_SOAP_ENC;
    URL url = new URL("http://localhost:8080/soap/rpcrouter/rpcrouter.jsp");
    SOAPMappingRegistry smr = new SOAPMappingRegistry();

    ArraySerializer aSer = new ArraySerializer();
     String[] data = new String[2];
     data[0] = new String("kailash");
     data[1] = new String("aynor");

    smr.mapTypes(Constants.NS_URI_SOAP_ENC,
    new QName(Constants.NS_URI_SOAP_ENC,
    "Array"),
    String[].class, aSer, aSer);

    Vector params = new Vector();
    params.addElement(new Parameter("rootElement",
    String[].class, (String[]) data, Constants.NS_URI_SOAP_ENC));

    // Build the call.
    Call call = new Call();

    call.setSOAPMappingRegistry(smr);
    call.setTargetObjectURI("urn:AddressFetcher");
    call.setMethodName("reverse");
    call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

    call.setParams(params);

    // Invoke the call.
    Response resp;
    try
    {
      resp = call.invoke(url, "");
    }
    catch (SOAPException e)
    {
      System.err.println("Caught SOAPException (" +
                         e.getFaultCode() + "): " +
                         e.getMessage());
      return;
    }

    // Check the response.
    if (!resp.generatedFault())
    {
      Parameter ret = resp.getReturnValue();
      String[] value = (String[])ret.getValue();

      System.out.println(value[0] + "   " + value[1]);
    }
    else
    {
      Fault fault = resp.getFault();

      System.err.println("Generated fault: ");
      System.out.println ("  Fault Code   = " + fault.getFaultCode());
      System.out.println ("  Fault String = " + fault.getFaultString());
    }

  }
}

It worked quite well while testing. Probably this can be added to the 
samples.

Kailash.



>From: Deepak Patil <de...@CENTEGY.COM>
>Reply-To: SOAP <SO...@DISCUSS.DEVELOP.COM>
>To: SOAP@DISCUSS.DEVELOP.COM
>Subject: Array of objects serialization...
>Date: Wed, 9 Aug 2000 13:38:26 -0700
>
>Hi,
>
>I am still stuck up with that arrayserializer...do anybody has a running
>example using ArraySerializer....
>I am getting an exception :
>
>Caught SOAPException (SOAP-ENV:Client): Unable to retrieve 'myName' 
>property
>value: object is not
>an instance of declaring class.
>
>It will be highly appreciated, if anyone did it please send me the lines of
>code at the client side mapping and the DD,
>
>Thanks & Regards
>Deepak

________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com