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

oco*_*or0 16 java wsdl web-services 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() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

但是下载了http://www.example.com/ws?wsdl我不想做的WSDL .

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

Jos*_*vis 19

我通过在客户端中为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");
Run Code Online (Sandbox Code Playgroud)

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

  • 对我来说这没那么简单。`@WebServiceClient` 注释有一个 `wsdlLocation` 属性,其中包含 WSDL 的绝对路径。手动删除此内容时(您确实不想这样做),我收到以下异常: `com.sun.xml.ws.streaming.XMLStreamReaderException: XML reader error: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected序言中的字符“a”(代码 97);预期为“<”。看起来它确实需要 WSDL 文件。 (2认同)

小智 1

我遇到了同样的问题,我解决了这个问题,但我无法用您的示例来揭示它,因为它取决于 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);
Run Code Online (Sandbox Code Playgroud)