Ошибка в клиентском веб-сервисе Portable JAXWS, использующем динамический URL, все еще ищущим локальный wsdl - PullRequest
2 голосов
/ 09 ноября 2011

после прочтения поста и многих других У меня есть клиент WSDL, из него я сгенерировал Java-заглушки, как это:

wsimport.bat   -Xnocompile -keep -Xendorsed  Client_aaa.wsdl

теперь в клиенте я хочу иметь возможность устанавливать динамические URL-адреса конечных точек, прочитав несколько постов, я сделал это так:

responseUrl = "...each thread get different endpoint url ...."

    ApiService ApiService = new ApiService();        
    Api port = ApiService.getApiPort();
    int ws_request_timeout = 3000
    int ws_connect_timeout = 3000;
    try{
        ((BindingProvider)port).getRequestContext().put("com.sun.xml.internal.ws.request.timeout",ws_request_timeout);
        ((BindingProvider)port).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout",ws_connect_timeout);
        ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,responseUrl);
    }
    catch(ClassCastException cco)
    {

        cco.printStackTrace();
    }
    catch(UnsupportedOperationException uso)
    {

        uso.printStackTrace();
    }
    catch(Exception e)
    {

        e.printStackTrace();
    }
    PACK PACK = port.sendAPI(MESSAGE);

но когда дело доходит до реального вызова клиента, я получаю это исключение:

Exception in thread "pool-1-thread-20" javax.xml.ws.WebServiceException: Failed to access th
e WSDL at: file:/D:/Java_2/libs/JAXWS2.2.5-20110729/jaxws-ri/bin/Client_aaa.wsdl.
 It failed with:
        Got D:\Java_2\libs\JAXWS2.2.5-20110729\jaxws-ri\bin\Client_aaa.wsdl (The
device is not ready) while opening stream from file:/D:/Java_2/libs/JAXWS2.2.5-20110729/jaxws
-ri/bin/Client_aaa.wsdl.
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:188
)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:170)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:135)
        at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:275)
        at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:238)
        at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:186)
        at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:111)
        at javax.xml.ws.Service.<init>(Service.java:56)
        at il.co.np.ApiService.<init>(Unknown Source)
        at com.serverrequest.RunnableTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886
)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

Ошибка, поскольку вы видите, что он пытается прочитать файл wsdl, из которого я скомпилировал заглушки

UPDATE:
это выглядит так, у меня есть аннотация в служебной заглушке, например:

@WebServiceClient(name = "ApiService", targetNamespace = "http://www.endpointurl/NP/2.0/", wsdlLocation = "file:/D:/Java_2/libs/JAXWS2.2.5-20110729/jaxws-ri/bin/Client_aaa.wsdl")

как это можно удалить? или лучше, как игнорировать это, когда я пытаюсь вызвать с динамической конечной точкой

...