Hi i'm new with cleaning soap and that i m unsure if this sounds like even possible. So allows start. The bean is VehicleBean it's 3 strings and also the techniques which is sent through cleaning soap properly. Things i am attempting to do is give a 4th variable of type MotorBean that is in the own a bean and send the entire factor around the wire. I have no idea however what variations ought to be done towards the deployment descriptor and also the client. This is actually the code from the client the issue is in the comment //How Do You MAP THE DOUBLEBEAN

Thanks for reading through this far. package BVShop1

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.encoding.soapenc.BeanSerializer;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.util.xml.QName;
public class BVAdderLister {
public void addlist(URL url, String model, String manufacturer, String year,String mcc,String cyl,String hp)
throws SOAPException{
// Build the object with the data given by user
    MotorBean mm=new MotorBean(mcc,cyl,hp);
VehicleBean vObj = new VehicleBean(model, manufacturer, year,mm);
//VehicleBean must now be mapped ... so SOAP can use it
//HOW DO I MAP THE DOUBLEBEAN

SOAPMappingRegistry reg = new SOAPMappingRegistry();
BeanSerializer serializer = new BeanSerializer();
reg.mapTypes(Constants.NS_URI_SOAP_ENC,
new QName("urn:VBean_xmlns","vObj"),
VehicleBean.class, serializer, serializer);
//Build the Call object
Call call = new Call();
//How to map, where to send, method to call, encoding "style"
call.setSOAPMappingRegistry(reg);
call.setTargetObjectURI("urn:BVehicleCatalog");
call.setMethodName("addV");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
//------------ A D D I N G ---------------------------------------------------
System.out.println("Adding vehicle model '" + model + "' by " + manufacturer);
// Set up the parameters of the call
Vector params = new Vector();
//in the instructions given to the 'Serializer' - see Depl. Descr.
params.addElement(new Parameter("vObj", VehicleBean.class, vObj, null));
call.setParams(params);
// Invoke the call
Response response;
response = call.invoke(url, "");
//We do not expect something back, unless there is a fault!!
if (!response.generatedFault())
{ System.out.println("Server reported NO FAULT while adding vehicle");}
else { Fault fault = response.getFault();
System.out.println("Server reported FAULT while adding:");
System.out.println(fault.getFaultString());}
//------------ L I S T I N G ---------------------------------------------------
//We use the same Call Object and change this as appropriate
/* Another method is now called*/
call.setMethodName("listV");
/* NO parameters here !!*/
/*(we cannot have a call with arguments as before)*/
call.setParams(null);
// Invoke the call; here we expect something back !!
response = call.invoke(url, "");
/*Extract the value returned in the form of a 'Parameter' Object*/
Parameter returnValue = response.getReturnValue();
/*Cast the 'Parameter' Object onto a Hashtabel Object*/
Hashtable catalog = (Hashtable)returnValue.getValue();
Enumeration e = catalog.keys();
while (e.hasMoreElements()) {
String VModel = (String)e.nextElement();
VehicleBean vo = (VehicleBean)catalog.get(VModel);
System.out.println(" '" + vo.getVModel() + "' by " + vo.getVManufacturer() +
", year " + vo.getVYear());
}
}
public static void main(String[] args) {
//if (args.length != 4){System.out.println("Put url, model, manufacturer & year as arguments !!");return;}
try {
// URL for SOAP server to connect to
URL urlink = new URL("http://localhost:8081/soap/servlet/rpcrouter");
// Get values for the new vehicle
String model = "Smart";
String manufacturer = "Swatch";
String year = "2001";
String m1 = "2002";
String m2 = "2003";
String m3 = "2004";
//Add the new vehicle,
BVAdderLister adderlister = new BVAdderLister();
adderlister.addlist(urlink, model, manufacturer, year,m1,m2,m3);
} catch (Exception e) {e.printStackTrace();}
}
}

This is actually the plan to be used

package BVShop1;
/*if present 'package MUST be the first statement,*/
/* (possibly) followed by 'import'*/
import java.util.Hashtable;
public class BVCatalog {
/**The vehicles as Hashtable*/
/** the car Model is the key for finding entries */
private Hashtable catalog;
public BVCatalog(){
/** the old catalog remains*/
/** but now the catalog (Hashtable) will contain also beans !!!*/
catalog=new Hashtable();
/**Some content - we NOW polulate with some objects!!*/
addV(new VehicleBean("Buick","General Motors","1948",new MotorBean("12","13","14")));
addV(new VehicleBean("Mustang","Ford","1960",new MotorBean("12","13","14")));
addV(new VehicleBean("4CV","Citroen","1950",new MotorBean("12","13","14")));
addV(new VehicleBean("Jeep","General Motors", "1942",new MotorBean("12","13","14")));
addV(new VehicleBean("Beatle","Volkswagen","1938",new MotorBean("12","13","14")));
}
/** FIRST METHOD TO BE EXPOSED - addV */
/** input argument is now a single ('complex') object !!*/
/** nothing is returned*/
public void addV(VehicleBean vObj) {
if (vObj == null){
throw new IllegalArgumentException("The object provided cannot be null.");
}
/** entry format for the Hashtable: key,data */
/** vObj.getVModel gets the 'key' out of the bean object*/
catalog.put(vObj.getVModel(),vObj);
System.out.println("Addition at server side: " + vObj.getVModel());
}
/** SECOND METHOD TO BE EXPOSED - getVehicleBean */
/** input argument is a String */
/** a ('complex') object is returned */
public VehicleBean getVehicleBean(String model) {
if (model==null){
throw new IllegalArgumentException("carModel cannot be null.");
}
//Return the requested vehicle - NOW AS AN OBJECT !!!!
return (VehicleBean)catalog.get(model);
}
/** THIRD METHOD TO BE EXPOSED - listV */
/** NO input argument - a whole table is returned */
/** ... , and that with ('complex') objects as entries !!!!*/
public Hashtable listV(){return catalog;}
}

This is actually the deployment descriptor where i've trouble with the maping

id = "urn:BVehicleCatalog">
<isd:provider
type="java" scope ="Application" methods="addV getVehicleBean listV">
<isd:java class="BVShop1.BVCatalog" static="false" />
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>



<isd:mappings>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="urn:VBean_xmlns" qname="x:vObj"
javaType="BVShop1.VehicleBean"
java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer"
xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/>
</isd:mappings>

<isd:mappings>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:x="urn:VMBean_xmlns" qname="x:mm"
javaType="BVShop1.MotorBean"
java2XMLClassName="org.apache.soap.encoding.soapenc.BeanSerializer"
xml2JavaClassName="org.apache.soap.encoding.soapenc.BeanSerializer"/>
</isd:mappings>



</isd:service>

Which two would be the bean and also the bean within the bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



package BVShop1;
/*if present 'package' MUST be the first statement,*/
/* (possibly) followed by 'import'*/
// The following class follows the structure of a 'Java Bean'
public class VehicleBean {
/**The properties of the VehicleBean*/
String VModel;
String VManufacturer;
String VYear;
MotorBean MBean;
/** The following non-argument constructor MUST be always present*/
/** for this class to be a Java Bean*/
public VehicleBean(){}
/** Another constructor CAN also be always present*/
/** - the following initializes all properties whenever*/
/** a new object is instantiated (with 'new') - */
public VehicleBean(String model,String manu,String year,MotorBean motor){
this.VModel= model; this.VManufacturer = manu; this.VYear= year; this.MBean=motor;}
/** get & set methods for all properties MUST be present*/
public MotorBean getMBean(){return MBean;}
public void setMBean(MotorBean mm){this.MBean= new MotorBean(mm.getMCc(),mm.getMNo_cylinders(),mm.getMPs());}
public String getVModel(){return VModel;}
public void setVModel(String model){this.VModel= model;}
public String getVManufacturer(){return VManufacturer;}
public void setVManufacturer(String manu){this.VManufacturer= manu;}
public String getVYear(){return VYear;}
public void setVYear(String year){this.VYear= year;}
/** toString is an in-built method for every Java object */
/** used for outputing an appropriate informative string */
public String toString(){
return "'" + VModel + "' by " + VManufacturer + " (" + VYear + ") "+ MBean.toString();}
}

the bean within the bean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BVShop1;

/**
 *
 * @author Administrator
 */
public class MotorBean {

    String MCc;
    String MNo_cylinders;
    String MPs;
    public MotorBean(){};
    public MotorBean(String m1,String m2,String m3){
this.MCc= m1; this.MNo_cylinders = m2; this.MPs= m3;}
public String getMCc(){return MCc;}
public void setMCc(String model){this.MCc= model;}
public String getMNo_cylinders(){return MNo_cylinders;}
public void setMNo_cylinders(String manu){this.MNo_cylinders= manu;}
public String getMPs(){return MPs;}
public void setMPs(String year){this.MPs= year;}

public String toString(){
return " '" + MCc + "cc of " + MNo_cylinders + "cyl and " + MPs + "hp ";}



}