无法实例化 SOAP 客户端 - 因 NullPointerException 而失败

Unable to instantiate SOAP Client - Failing with NullPointerException

在实例化 SOAP 客户端时,我得到 NullPointerException

@WebServiceClient(name = "QWEServiceManager", targetNamespace = "http://external.ws.services.abc.com/", wsdlLocation = "file:/C:/Users/XYZ/Desktop/77777/QWEServiceManagerService.wsdl")
public class QWEServiceManagerService extends Service

当我尝试创建一个客户端实例来调用 SOAP 服务时

QWEServiceManagerService serv = new QWEServiceManagerService()

以上抛出

Exception in thread "main" javax.xml.ws.WebServiceException: Unable to createEndpointReference Provider
    at javax.xml.ws.spi.Provider.provider(Provider.java:160)
    at javax.xml.ws.Service.<init>(Service.java:92)
    at QWEServiceManagerService.<init>(QWEServiceManagerService .java:48)
    at WsClient.main(WsClient.java:26)
Caused by: java.lang.NullPointerException
    at javax.xml.ws.spi.Provider.provider(Provider.java:152)
    ... 3 more

问题在于 Java 在 Java 6+ 以上停止提供默认提供程序实现。

它试图通过以下步骤找到 Impl:

  • 首先由服务加载程序
  • 来自 JDK 属性(来自 $java.home/lib/jaxws.properties)
  • 使用系统属性
  • 使用 OSGi 服务加载器查找

所以,简单来说,添加与提供程序实现的依赖项可以解决问题。

对我来说,添加 jaxws-rt 依赖项解决了问题。

注意:我遇到了另一个依赖问题,为此我确实需要添加另一个依赖 stax-ex 解决我所有的依赖问题。