在不下载WSDL的情况下实例化JAX-WS服务?

我有一个Web服务,我有JAX-WS生成的客户端绑定如下:

// web service client generated by JAX-WS @WebServiceClient( ... ) public class WebService_Service extends Service { public WebService_Service(URL wsdlLocation, QName serviceName) { super(wsdlLocation, serviceName); } WebService getWebServiceSOAP() { // ... } } 

我希望能够创建一个指向远程服务的实例,例如:

 WebService_Service svc = new WebService_Service( new URL("http://www.example.com/ws?wsdl"), new QName("http://www.example.com/ws", "WebService")); 

但是从http://www.example.com/ws?wsdl下载WSDL,我不想这样做。

有没有办法停止下载该WSDL,但仍然指向同一个端点?

我通过在客户端中为WSDL URL指定null来解决此问题,并明确指定端点地址:

 WebService_Service svc = new WebService_Service( null, new QName("http://www.example.com/ws", "WebService")); WebService port = svc.getPort(WebService.class); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.example.com/real_endpoint_url_goes_here"); 

请参阅: http : //shrubbery.homeip.net/c/display/W/Consuming+a+Web+Service+with+Java+6+and+JAX-WS#ConsumingaWebServicewithJava6andJAX-WS-IgnoringtheWSDLCompletely

我有同样的问题,我解决了这个问题,但我无法用你的样本揭示它,因为它取决于wsdl。

这是我的代码,跟踪解决方案:

  //This is the input object for the webservice GetDocumentInfoInput input = new GetDocumentInfoInput(); input.setBarcode(barcode); //I instantiate the WS MAKSpcIntSpcWFSpcScannerInfo_Service service = new MAKSpcIntSpcWFSpcScannerInfo_Service(); //I get the WS port MAKSpcIntSpcWFSpcScannerInfo port = service.getMAKSpcIntSpcWFSpcScannerInfo(); WSBindingProvider provider = (WSBindingProvider)port; //This is the row what set the URL for the WS provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url); //This is the WS calling GetDocumentInfoOutput output = port.getDocumentInfo(input); 

WSDL文件可能包含生成的存根不包含的配置选项,因此在运行时需要它们。 您可以在类路径中本地提供它们。

将我正在使用的服务的WSDL文件放入我的${basedir}\src\main\resources\META-INF\wsdl文件夹后,以下maven pom.xml为我工作:

  org.jvnet.jax-ws-commons jaxws-maven-plugin 2.3   MyService  wsimport     -B-XautoNameResolution  de.xyz ${basedir}\src\main\resources\META-INF\wsdl  MyService.wsdl  META-INF/wsdl/MyService.wsdl   [...] 

在运行时,将从类路径加载wsdl文件。