有关Web Service传递复杂类型的问题
有关Web Service传递复杂类型的问题
Web Service中有一些API是接收复杂类型的,我是这样的调用的,但出现了异常.代码和异常如下,希望达人指点.
不知我哪里出错?
客户端代码:
String wsdlUrl = "http://localhost:8080/axis/services/PersonIdServ?wsdl";
String nameSpaceUri = "urn:PersonIdServ";
Service service = new Service();
Call call = (Call) service.createCall();
QName ariQn = new QName(nameSpaceUri, "BiArithmetic");
call.registerTypeMapping(BiArithmetic.class, ariQn,
new BeanSerializerFactory(BiArithmetic.class, ariQn),
new BeanDeserializerFactory(BiArithmetic.class, ariQn)
);
try {
call.setTargetEndpointAddress(new URL(wsdlUrl));
call.setOperationName(new QName(nameSpaceUri,
"createBiArithmetic"));
call.addParameter("arg1", ariQn, ParameterMode.IN);
call.setReturnType(XMLType.AXIS_VOID);
BiArithmetic biAri = new BiArithmetic ("1234567", 1);
biAri.setAriData(byteArrayOut.toByteArray());
biAri.setAriName("test");
biAri.setAriSuffix("ari");
biAri.setBaseInd("N");
biAri.setPrimaryInd("Y");
biAri.setFetchLen("9999");
biAri.setUsualInd("Y");
Object obj = call.invoke(new Object[] { biAri});
if (obj != null)
System.out.println(obj.toString());
} catch (Exception e) {
e.printStackTrace();
}
布置代码:
<service name="PersonIdServ" provider="java:RPC">
<parameter name="className" value="com.ak.bi.serv.PersonIdServ"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:BiArithmetic" xmlns:myNS="urn:BiArithmetic" languageSpecificType="java:com.ak.bi.BiArithmetic"/>
</service>
异常:
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: No object was found for class type int
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:16391A0688E2477
org.xml.sax.SAXException: No object was found for class type int
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
at org.apache.crimson.parser.Parser2.content(Unknown Source)
at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
at org.apache.crimson.parser.Parser2.content(Unknown Source)
at org.apache.crimson.parser.Parser2.maybeElement(Unknown Source)
at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source)
at org.apache.crimson.parser.Parser2.parse(Unknown Source)
at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.ak.bi.util.BiPictureClient.main(BiPictureClient.java:105)
很明显是客户端出错了,BiArithmetic.class里有一个Field是int类型,其他为String类型.
Ps:如果我传递的是基本类型的话是没问题的.
期待达人指点.