hy,
i have this service:

        public Result MyService() {
                Result res = new Result();
                res.setNome("simone");
                res.setCognome("baffi");
                res.setEta(new BigDecimal("35"));
                InnerResult inner1 = new InnerResult();
                inner1.setProfessione("impiegato");
                inner1.setAnniServizio(new BigDecimal(8));
                InnerResult inner2 = new InnerResult();
                inner2.setProfessione("quadro");
                inner2.setAnniServizio(new BigDecimal(5));
                InnerResult[] profs = new InnerResult[2];
                profs[0] = inner1;
                profs[1] = inner2;
                res.setProfessioni(profs);
                return res;
        }

the class Result is:


public class Result implements Serializable{

        String nome = null;
        String cognome = null;
        BigDecimal eta = null;
        InnerResult[] professioni = null;

        /**
         * @return
         */
        public String getCognome() {
                return cognome;
        }

        /**
         * @return
         */
        public BigDecimal getEta() {
                return eta;
        }

        /**
         * @return
         */
        public String getNome() {
                return nome;
        }

        /**
         * @param string
         */
        public void setCognome(String string) {
                cognome = string;
        }

        /**
         * @param decimal
         */
        public void setEta(BigDecimal decimal) {
                eta = decimal;
        }

        /**
         * @param string
         */
        public void setNome(String string) {
                nome = string;
        }

        /**
         * @return
         */
        public InnerResult[] getProfessioni() {
                return professioni;
        }

        /**
         * @param results
         */
        public void setProfessioni(InnerResult[] results) {
                professioni = results;
        }

}

and the InnerClass is:

public class InnerResult implements Serializable{

        public String professione = null;
        public BigDecimal anniServizio = null;

        /**
         * @return
         */
        public BigDecimal getAnniServizio() {
                return anniServizio;
        }

        /**
         * @return
         */
        public String getProfessione() {
                return professione;
        }

        /**
         * @param decimal
         */
        public void setAnniServizio(BigDecimal decimal) {
                anniServizio = decimal;
        }

        /**
         * @param string
         */
        public void setProfessione(String string) {
                professione = string;
        }

}


I deployed this service in Axis 1.3 with this wsdd file:


<deployment xmlns="http://xml.apache.org/axis/wsdd/"; 
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"; 
xmlns:source="http://test.webservices.iss.it"; >
        <service name="Service" provider="java:RPC" style="wrapped" 
use="literal">
                <parameter name="className" 
value="it.iss.webservices.test.Service"/>
        <parameter name="allowedMethods" value="MyService"/>

        <namespace>http://test.webservices.iss.it</namespace>
                <operation name="MyService" qname="source:MyService" 
returnQName="Result" returnType="source:Result" />

                <beanMapping qname="source:Result" 
classname="it.iss.webservices.test.Result" 
languageSpecificType="java:it.iss.webservices.test.Result" />
                <beanMapping qname="source:InnerResult" 
classname="it.iss.webservices.test.InnerResult" 
languageSpecificType="java:it.iss.webservices.test.InnerResult" />

                <arrayMapping qname="source:ArrayOfInnerResult" 
languageSpecificType="java:it.iss.webservices.test.InnerResult[]"
                innerType="source:InnerResult" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
        </service>
</deployment>

If I use the DII client like this:

public class TestClient {

        public static void main(String[] args) {
                try {
                        //
                        Service service = new Service();

                        Call call = (Call) service.createCall();
                        call.setTargetEndpointAddress(new 
java.net.URL("http://localhost:8080/axis/services/Service";));
                        QName qnser = new 
QName("http://test.webservices.iss.it";, "MyService");
                        call.setOperationName(qnser);
                        QName result = new 
QName("http://xml.apache.org/xml-soap";, "Result");
                        call.registerTypeMapping(Result.class, result, new 
BeanSerializerFactory(Result.class, result), new 
BeanDeserializerFactory(Result.class, result));
                        QName innerresult = new 
QName("http://xml.apache.org/xml-soap";, "InnerResult");
                        call.registerTypeMapping(InnerResult.class, 
innerresult, new BeanSerializerFactory(InnerResult.class, innerresult), new 
BeanDeserializerFactory(InnerResult.class, innerresult));
                        call.setReturnType(result);
                        Result ret = (Result) call.invoke(new Object[]{});
                        System.out.println(ret.getNome());
                        System.out.println(ret.getCognome());
                        System.out.println(ret.getEta() + "");
                        for (int i = 0; i < ret.getProfessioni().length; i++) {
                                
System.out.println(ret.getProfessioni()[i].getProfessione());
                                
System.out.println(ret.getProfessioni()[i].getAnniServizio() + "");
                        }
                } catch (Exception e) {
                        System.err.println(e.toString());
                }
        }


but the wsdl, generated automatically by axis, doesn't work.
If i build a static stub client from the wsdl, I have a deserialization problem 
in the custom array.

Help ???
Thank you in advance.
Bye



Reply via email to