我正在开发一个已经实现基于metro
的web服务客户端的项目。现在,我需要为其他服务添加另一个客户端。我实现了新的客户端,但是现在它有标题时会引发异常(需要标题)。如果我删除所有地铁罐,这个新客户工作正常,但显然我的地铁客户端失败。我需要关于可能的选项,解决方法或解决方案的指导。发送soap请求时的ClassCastException
Caused by: javax.xml.ws.WebServiceException: java.lang.ClassCastException: com.sun.xml.ws.message.saaj.SAAJHeader cannot be cast to com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:250)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:961)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
at com.sun.xml.ws.client.Stub.process(Stub.java:429)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
at com.sun.proxy.$Proxy70.methodName(Unknown Source)
... 15 more
Caused by: java.lang.ClassCastException: com.sun.xml.ws.message.saaj.SAAJHeader cannot be cast to com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader
at com.sun.xml.ws.security.opt.impl.JAXBFilterProcessingContext.setJAXWSMessage(JAXBFilterProcessingContext.java:166)
at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.secureOutboundMessage(SecurityTubeBase.java:381)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientRequestPacket(SecurityClientTube.java:323)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:247)
我发现类似的问题,几个问题,如here,但他们都最终建议删除头这不是我的选择。 PS:对于使用metro jars的现有web服务客户端,我们使用连接器(如其实际包括所有与城域有关的类)的连接器连接到它们的服务器(我认为是非常奇怪的)。如果我从连接器移动任何东西,它将使支持协议无效。所以我不想移除地铁罐,而是寻找替代方法来适应它。
如何实现自定义SoapHandler/Interceptor,您可能可以自己编组/解组头文件? – Mechkov
查看'Headers'方法,如getHeaders()... – Mechkov
https://docs.oracle.com/cd/E13222_01/wls/docs103/webserv_adv/handlers.html – Mechkov