Jus*_*tin 5 java web-services jax-ws webservice-client
我正在尝试在此处调用Web服务:http : //publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL
我已经使用wsimport和JDK1.6.0_29生成了代理类。我的wsimport命令行是:
wsimport.exe" -keep -B-XautoNameResolution -d E:\mapov\mapov-dev\shared\hotel_info\ http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码尝试调用该服务:
QName qName = new QName("http://webservices.hotel.de/V2_8", "FreeHotelSearchWebService");
FreeHotelSearchWebService service = new FreeHotelSearchWebService(new URL("http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc"), qName);
IFreeHotelSearchWebService sws = service.getBasicHttpBindingIFreeHotelSearchWebService();
String version = sws.getWebservicesVersion();
System.out.println("Hotel.info web service version: " + version);
Run Code Online (Sandbox Code Playgroud)
但是我得到以下异常:
线程“主”中的异常javax.xml.ws.WebServiceException:不支持的端点地址:在com.sun.xml.ws上的com.sun.xml.ws.api.pipe.TransportTubeFactory.create(TransportTubeFactory.java:148)上。 com.sun.xml.ws.api.pipe.Fiber .__ doRun(Fiber.java:641)的com.sun.xml.ws.api.pipe.Fiber的transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:134) com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)的_doRun(Fiber.java:600)com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber。 com.sun.xml.ws.client.Stub.process(Stub.java:323)处com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)处的java:482) com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)上的.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:113)。xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)在$ Proxy42.getWebservicesVersion(未知源)
在大多数示例中,我已经看到生成的代码包含getPort()方法,但尚未为此类生成此代码。我的代码错误还是我需要以其他方式运行wsimport?我还尝试了调用FreeHotelWebService构造函数而没有产生相同异常的参数。
根据 Justin 和Tug 的博客重新提出一个无答案的问题:
JAX-WS:如何在运行时配置服务端点?
部署 Web 服务客户端时,您经常需要更改在代码生成期间设置的服务端点。这篇简短的文章解释了如何在客户端代码中在运行时设置更改它。
您有两种方法可以做到这一点:
使用 Binding Provider 设置端点 URL
第一种方法是使用以下代码更改 BindingProvider(端口)的 BindingProvider.ENDPOINT_ADDRESS_PROPERTY 属性值:
try {
EmployeeServiceService service = new EmployeeServiceService();
EmployeeService port = service.getEmployeeServicePort();
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://server1.grallandco.com:8282/HumanRessources/EmployeeServiceService");
Employee emp = port.getEmployee(123);
System.out.println("Result = "+ emp);
} catch (Exception ex) {...
Run Code Online (Sandbox Code Playgroud)
使用 WSDL 获取端点 URL
另一部分是在创建服务时设置 WSDL。该服务将使用位于 WSDL 端口 -SOAP Endpoint- 中的值。只需使用以下代码即可完成此操作:
try {
EmployeeServiceService service =
new org.demo.service.EmployeeServiceService(
new URL(
"http://server1.grallandco.com:8282/HumanRessources/" +
"EmployeeServiceService?wsdl"),
new QName(
"http://service.demo.org/",
"EmployeeServiceService"));
EmployeeService port = service.getEmployeeServicePort();
Employee emp = port.getEmployee(123);
System.out.println("Result = "+ emp);
} catch (Exception ex) {...}
Run Code Online (Sandbox Code Playgroud)
请注意,在 Glassfish 中,与许多 Web 服务环境一样,WSDL 可以根据用于获取 WSDL 的 URL 动态生成端点 URL。通过这种方法,您还可以动态更改 Soap 端点(如果与生产环境的网络配置兼容)。
| 归档时间: |
|
| 查看次数: |
18345 次 |
| 最近记录: |