在使用javax.xml.namespace.Qname和javax.xml.ws.handler.PortInfo时出现Classcast异常

3

我正在使用IntelliJ连接到外部WSDL。

连接到WSDL并生成我的Java类后,我尝试从服务获取响应。

服务非常简单,只需要简单的“是”、“否”和“不正确”的消息响应。

但是我得到了一个涉及PortInfoQname的类转换异常。

以下是方法列表调用。

 Service helloService = Service.create(
      helloWsdlUrl, 
      new QName(nameSpaceUri, serviceName));

 List list = helloService.getHandlerResolver().getHandlerChain(
      (PortInfo) new QName(nameSpaceUri, portName));

 list.add(new HandlerInfo((Class) null, (Map)null, (QName[])null));

而我得到的错误信息是:
Exception in thread "main" java.lang.ClassCastException: 
javax.xml.namespace.QName cannot be cast to javax.xml.ws.handler.PortInfo
at Client.main(Client.java:37)

端口信息的图片已移除

非常感谢您的帮助。

谢谢

1个回答

1
您的问题是无法将 QName 强制转换为 PortInfo。以下代码导致了错误:
(PortInfo) new QName(...)

为什么要进行这样的转换?getHandlerChain()应该能够接受一个QName实例。


getHandlerChain 期望 PortInfo。 - Ibbylun
嗯...我记得我曾经在getHandlerChain中使用过一个接受QNameHandlerResolver。你可以从服务描述中获取PortInfo,或者构建一个。你只需要一种方法来返回绑定ID、端口和服务名称。 - dovetalk
那么,如何以不会导致强制转换错误的方式返回它们呢? - Akjm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接