после прочтения поста и многих других
У меня есть клиент 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")
как это можно удалить? или лучше, как игнорировать это, когда я пытаюсь вызвать с динамической конечной точкой