我正在尝试调用这里的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
我正在使用以下代码尝试调用该服务:
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);
然而,我得到了以下异常:
在线程“
”javax.xml.ws.WebServiceException中出现异常:不支持的端点地址: at com.sun.xml.ws.api.pipe.TransportTubeFactory.create(TransportTubeFactory.java:148) at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:134) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641) at com.sun.xml.ws.api.pipe.Fiber._doRun(在com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482) at com.sun.xml.ws.client.Stub.process(Stub.java:323) at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161) at com.sun.xml.ws.client。sei.SyncMethodHandler.invoke(SyncMethodHandler.java:113) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93) at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144) at $Proxy42.getWebservicesVersion(未知源)
在大多数示例中,我看到生成的代码包含一个getPort()方法,但还没有为该类生成该方法。是我的代码错了,还是我需要以不同的方式运行wsimport?我也尝试过在不带参数的情况下调用FreeHotelWebService构造函数,这也会产生同样的异常。
发布于 2018-09-21 01:19:02
基于Justin's和Tug's Blog的无答案问题的复活
:如何在运行时配置服务端点?
在部署Web服务客户端时,您通常需要更改在代码生成过程中设置的服务端点。这篇简短的文章解释了如何在运行时在客户端代码中设置change it。
有两种方法可以做到这一点:
使用绑定提供程序设置端点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) {...
使用WSDL获取端点URL
另一部分是在创建服务时设置WSDL。服务将使用位于WSDL端口-SOAP端点中的值。这只需使用以下代码即可完成:
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) {
请注意,在Glassfish中,与许多Web服务环境一样,WSDL可以基于用于获取WSDL的URL动态生成端点URL。使用这种方法,您还可以动态更改Soap端点(如果与生产环境的网络配置兼容)。
https://stackoverflow.com/questions/8588852
复制相似问题