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