0

我正在为现有的 SOAP Web 服务编写客户端。我已经使用 wsimport 实用程序针对在我的 Tomcat 中运行的服务实例的 WSDL 文件生成了存根。

问题是,wsimport 在生成的代码中使用固定的 URL 地址,因此该应用程序仅在针对一台特定服务器(例如在我的测试环境中)运行时才有效。

我需要能够使用服务实际部署的 URL 地址对存根进行参数化。


根据这个线程,它应该有助于使用两个参数的构造函数而不是默认构造函数,并传递 WSDL 文件的实际 URL 地址和与默认构造函数中使用的相同的限定名称。

不过,这对我不起作用。它抛出以下异常:

Exception in thread "main" java.lang.Error: Undefined operation name GetMetadataLanguages
    at com.sun.xml.ws.model.JavaMethodImpl.freeze(JavaMethodImpl.java:327)
    at com.sun.xml.ws.model.AbstractSEIModelImpl.freeze(AbstractSEIModelImpl.java:97)
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:268)
    at com.sun.xml.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:633)
    at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:328)
    at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:311)
    at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:304)
    at javax.xml.ws.Service.getPort(Unknown Source)
    at com.opentext.livelink.service.docman.DocumentManagement_Service.getBasicHttpBindingDocumentManagement(DocumentManagement_Service.java:66)
    at cz.csinsertdt.util.cs.CSAuthenticationHandler.getDocManagementService(CSAuthenticationHandler.java:91)
    at cz.csinsertdt.TestScenario02.getDocManagementService(TestScenario02.java:264)
    at cz.csinsertdt.TestScenario02.run(TestScenario02.java:73)
    at cz.csinsertdt.TestScenario02.main(TestScenario02.java:57)

我究竟做错了什么?


我的代码中引发异常的部分如下所示:

DocumentManagement_Service service = new DocumentManagement_Service(
    new URL(location.toString() + "/DocumentManagement?wsdl"),
    new QName("urn:DocMan.service.livelink.opentext.com", "DocumentManagement")
);

DocumentManagement endpoint = service.getBasicHttpBindingDocumentManagement();
setSoapHeader((WSBindingProvider) endpoint, otAuth);

return endpoint;

otAuth 是从另一个服务获得的授权令牌。

4

0 回答 0