Newsgroup: it.comp.java
Titolo: Passare un Array di Object ad un Web Service Axis2

Ciao a tutti,
avrei necessità di realizzare un web service, implementato con Axis2,
che riceva in input un Array. Il problema è che quando il client manda
l'array al web service, questo riceve un array vuoto.
Ho provato sia cercando di passare direttamente l'array sia passando
una classe che lo contiene. Nel primo caso, il web service riceve un
array con dimensione pari a 0, mentre nel secondo caso (passandogli il
bean) riceve un array NULL.
Lo stub è stato generato da Netbeans 6.7.
Ecco il codice che ho utilizzato:
- Web Service
//WSList.java
public class WSList {
    //passing MyArray bean which contains Object[]
    public String putArr(MyArray ma)
    {
        if(ma.arr==null)
            return "empty";
        else
            return "non empty";
    }
    //passing directly Object[]
    public int putObj(Object []o)
    {
        return o.length;
    }
}
//MyArray.java
public class MyArray {
    public Object []arr;
}
- Client
//WSList_Client.java
public class WSList_Client {
    public static void putArr()
    {
        try { // Call Web Service Operation
            wslist.WSList service = new wslist.WSList();
            wslist.WSListPortType port =
service.getWSListSOAP12PortHttp();
            // TODO initialize WS operation arguments here
            wslist.xsd.MyArray ma = new wslist.xsd.MyArray();
            ma.getArr().add(new Integer(1));
            ma.getArr().add(new Integer(2));
            System.out.println(ma.getArr().size());
            // TODO process result here
            java.lang.String result = port.putArr(ma);
            System.out.println("Result = "+result);
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }
    public static void putObj()
    {
        try { // Call Web Service Operation
            wslist.WSList service = new wslist.WSList();
            wslist.WSListPortType port =
service.getWSListSOAP12PortHttp();
            // TODO initialize WS operation arguments here
            java.util.List<java.lang.Object> o = new
java.util.ArrayList<java.lang.Object>();
            o.add(new Integer(1));
            o.add(new Integer(2));
            // TODO process result here
            java.lang.Integer result = port.putObj(o);
            System.out.println("Result = "+result.intValue());
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }
}
//WSListPortType.java
@WebService(name = "WSListPortType", targetNamespace = "http://
wslist/")
@XmlSeeAlso({
    ObjectFactory.class
})
public interface WSListPortType {
    @WebMethod(action = "urn:putArr")
    @WebResult(targetNamespace = "
http://wslist/xsd
")
    @RequestWrapper(localName = "putArr", targetNamespace = "http://
wslist/xsd", className = "wslist.xsd.PutArr")
    @ResponseWrapper(localName = "putArrResponse", targetNamespace =
"
http://wslist/xsd
", className = "wslist.xsd.PutArrResponse")
    public String putArr(
        @WebParam(name = "ma", targetNamespace = "
http://wslist/xsd
")
        MyArray ma);
    @WebMethod(action = "urn:putObj")
    @WebResult(targetNamespace = "
http://wslist/xsd
")
    @RequestWrapper(localName = "putObj", targetNamespace = "http://
wslist/xsd", className = "wslist.xsd.PutObj")
    @ResponseWrapper(localName = "putObjResponse", targetNamespace =
"
http://wslist/xsd
", className = "wslist.xsd.PutObjResponse")
    public Integer putObj(
        @WebParam(name = "o", targetNamespace = "
http://wslist/xsd
")
        List<Object> o);
}
//PutArr.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "ma"
})
@XmlRootElement(name = "putArr")
public class PutArr {
    @XmlElementRef(name = "ma", namespace = "
http://wslist/xsd
", type
= JAXBElement.class)
    protected JAXBElement<MyArray> ma;
    public JAXBElement<MyArray> getMa() {
        return ma;
    }
    public void setMa(JAXBElement<MyArray> value) {
 
this.ma
 = ((JAXBElement<MyArray> ) value);
    }
}
//PutObj.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "o"
})
@XmlRootElement(name = "putObj")
public class PutObj {
    @XmlElement(nillable = true)
    protected List<Object> o;
    public List<Object> getO() {
        if (o == null) {
            o = new ArrayList<Object>();
        }
        return this.o;
    }
}
Spero possiate aiutarmi. Grazie mille ragazzi

 Lo stub � stato generato da Netbeans 6.7.
