在不下载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文件。