org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
客户端代码:
package test;
import example.HelloWorld;
import org.apache.axis.client.Service;
import org.apache.axis.utils.StringUtils;
import org.apache.axis.client.Call;
public class Client {
public static void main(String[] args) {
// 指定调用WebService的URL(这里是我们发布后点击HelloWorld)
String url = "http://localhost:8080/WebService1_war_exploded/services/HelloWorld?wsdl";
//调用的方法
String method = "add";
//调用方法的参数列表
Object[] parms = new Object[]{2.0,3.0};
Client calculateClient = new Client();
//调用方法
String svrAddResult = calculateClient.CallMethod(url, method, parms);
System.out.println(svrAddResult);
String svrMinusResult = calculateClient.CallMethod(url, "minus", new Object[]{5.0,2.0});
String svrMultiplyResult = calculateClient.CallMethod(url, "multiply", new Object[]{2.0,3.0});
String svrDivideResult = calculateClient.CallMethod(url, "divide", new Object[]{8.0,5.0});
String svrPowerResult = calculateClient.CallMethod(url, "power", new Object[]{5.0});
String svrSqrtResult = calculateClient.CallMethod(url, "sqrt", new Object[]{9.0});
System.out.println("5.0 - 2.0 is " + svrMinusResult);
System.out.println("2.0 * 3.0 is " + svrMultiplyResult);
System.out.println("8.0 - 5.0 is " + svrDivideResult);
System.out.println("5.0^2 is " + svrPowerResult);
System.out.println("9.0^(1/2) is " + svrSqrtResult);
}
//实现WebService上发布的服务调用
public String CallMethod(String url, String method, Object[] args) {
String result = null;
if(StringUtils.isEmpty(url)) {
return "url地址为空";
}
if(StringUtils.isEmpty(method)) {
return "method地址为空";
}
Call rpcCall = null;
try {
//实例websevice调用实例
Service webService = new Service();
rpcCall = (Call) webService.createCall();
rpcCall.setTargetEndpointAddress(new java.net.URL(url));
rpcCall.setOperationName(method);
//执行webservice方法
double rslt = (double) rpcCall.invoke(args);
result = String.valueOf(rslt);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
编写的服务是实现两个数之间基本运算的服务,能够通过Tomcat成功发布,但是调用的时候报错,以下是报错信息:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
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 java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:610)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1718)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2883)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324)
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 test.Client.CallMethod(Client.java:60)
at test.Client.main(Client.java:28)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:DESKTOP-05C2Q8J
查阅了网上的方法,将server-config.wsdd里面的的style和use的内容删除了,还是有这个异常,打印出来的结果如下:
5.0 - 2.0 is null
2.0 * 3.0 is null
8.0 - 5.0 is null
5.0^2 is null
9.0^(1/2) is null
本来的结果应该是调用服务计算相应的运算,但是现在的结果都是null.