我有一个非常简单的SOAP客户端,我是在wsimport实用程序的帮助下针对我自己的webservice创建的。客户端工作原理非常好,但是当我添加一个处理程序时,它会中断。下面是我的工作客户,打印' 1'到控制台...
public class MyFirstSoapClient {
public static void main(String args[]) {
SuperSimpleServiceService sib = new SuperSimpleServiceService();
ServiceEndpointInterface sei = sib.getSuperSimpleServicePort();
System.out.println(sei.return1());
}
}
现在对于有趣的部分,这里是与处理程序实现相同的客户端,后跟输出...
public class MyFirstSoapClient {
public static void main(String args[]) {
SuperSimpleServiceService sib = new SuperSimpleServiceService();
sib.setHandlerResolver(new HandlerRegistration());
ServiceEndpointInterface sei = sib.getSuperSimpleServicePort();
System.out.println(sei.return1());
}
}
输出
MyHandler: getHeaders
MyHandler: handleMessage
MyHandler: close
Exception in thread "main" com.sun.xml.internal.ws.streaming.XMLStreamReaderException: unexpected XML tag. expected: {http://interfaces.wsd.oce/}return1Response but found: {http://interfaces.wsd.oce/}return1
at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.verifyTag(Unknown Source)
at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.verifyTag(Unknown Source)
at com.sun.xml.internal.ws.client.sei.ResponseBuilder$DocLit.readResponse(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at com.sun.proxy.$Proxy24.return1(Unknown Source)
at oce.wsd.client.MyFirstSoapClient.main(MyFirstSoapClient.java:22)
请注意,在输出中,在异常之前打印了3行,这些行来自我的处理程序类,这证明它已注册并正常工作。我意识到这是有限的信息,但我不知道哪里可以解决这个问题。任何想法从哪里开始?如果有任何其他课程有帮助,请告诉我。
答案 0 :(得分:6)
我在使用虚拟SoapHandler实现时遇到了同样的问题。 (与您的日志相同的调用顺序:getHeaders,handleMessage,close,Exception)。 结果我的问题是从handleMessage方法返回false。文档说明:"返回true以继续处理。" http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/handler/Handler.html