最近使用axis时碰到Axis fault: No serializer found for class错误,以下是调用函数部分:
<pre name="code" class="java">Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(service_url));
SOAPHeaderElement ppElement = setSoapHeader(service_account, service_password);
call.addHeader(ppElement);
call.setProperty("WSS-Password Type", "PasswordText");
call.setOperationName(new QName("http://10.105.152.6/oa/services/pension", opername));
String ret = (String) call.invoke(arg);
解决方案:在String ret = (String) call.invoke(arg);调用之前加上以下代码
//对 Head JCXX BDXX Attachment进行序列化
<pre name="code" class="java">QName qnameHead = new QName("ns1:Head","Head");
QName qnameJCXX = new QName("ns1:JCXX","JCXX");
QName qnameBDXX = new QName("ns1:BDXX","BDXX");
QName qnameAttachment = new QName("ns1:Attachment","Attachment");
call.registerTypeMapping(Head.class, qnameHead,
new BeanSerializerFactory(Head.class, qnameHead),
new BeanDeserializerFactory(Head.class, qnameHead));
call.registerTypeMapping(JCXX.class, qnameJCXX,
new BeanSerializerFactory(JCXX.class, qnameJCXX),
new BeanDeserializerFactory(JCXX.class, qnameJCXX));
call.registerTypeMapping(BDXX.class, qnameBDXX,
new BeanSerializerFactory(BDXX.class, qnameBDXX),
new BeanDeserializerFactory(BDXX.class, qnameBDXX));
call.registerTypeMapping(Attachment.class, qnameAttachment,
new BeanSerializerFactory(Attachment.class, qnameAttachment),
new BeanDeserializerFactory(Attachment.class, qnameAttachment));