Service.create 方法之间的差异

Difference Between Service.create approaches

我正在使用包装 SOAP 服务的第三方库。

它使用了以下成语

String url = SOME_URL
QName SERVICE_NAME = new QName("http://www.example.com/Webapp/1", "WS")
QName PORT_NAME = new QName("http://www.example.com/Webapp/1", "WSPort")
Service service = Service.create(SERVICE_NAME)
service.addPort(PORT_NAME, "http://schemas.xmlsoap.org/wsdl/soap/http", url)
SomeWebService port = service.getPort(SomeWebService.class)

这不起作用我收到以下错误

WSDL Metadata not available to create the proxy, either Service instance or ServiceEndpointInterface

但是,如果我稍微更改成语以在服务创建中使用 URL

String url = SOME_URL
QName SERVICE_NAME = new QName("http://www.example.com/Webapp/1", "WS")
QName PORT_NAME = new QName("http://www.example.com/Webapp/1", "WSPort")
Service service = Service.create(new URL(url), SERVICE_NAME)
SomeWebService port = service.getPort(SomeWebService.class)

然后它工作正常。不幸的是,这是一个第三方 jar,我只知道这是由于反编译。是否有可能我有一个依赖罐子的错误版本?其他人似乎遇到了同样的问题,但他们能够进行上述更改。我不是。

这个问题似乎是由于我使用的第三方 jar 是针对 Java 1.5 编写的,它不包含自己的 CXF、JAXB 等版本,覆盖了这些版本在我的 pom 文件中使用 Java 1.5 可以解决的问题。