首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“异常javax.xml.ws.WebServiceException:不支持的端点地址”尝试使用JAX-WS2.1调用web服务

“异常javax.xml.ws.WebServiceException:不支持的端点地址”尝试使用JAX-WS2.1调用web服务
EN

Stack Overflow用户
提问于 2011-12-21 19:09:00
回答 1查看 20.8K关注 0票数 6

我正在尝试调用这里的web服务:http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL

我已经使用wsimport和JDK1.6.0_29生成了代理类。我的wsimport命令行是:

代码语言:javascript
复制
wsimport.exe" -keep -B-XautoNameResolution -d E:\mapov\mapov-dev\shared\hotel_info\ http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL

我正在使用以下代码尝试调用该服务:

代码语言:javascript
复制
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构造函数,这也会产生同样的异常。

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 01:19:02

基于Justin's和Tug's Blog的无答案问题的复活

:如何在运行时配置服务端点?

在部署Web服务客户端时,您通常需要更改在代码生成过程中设置的服务端点。这篇简短的文章解释了如何在运行时在客户端代码中设置change it。

有两种方法可以做到这一点:

  • 使用BindingProvider在端口中设置端点;
  • 在运行时从WSDL本身获取端点URL;

使用绑定提供程序设置端点URL

第一种方法是使用以下代码更改BindingProvider (端口)的BindingProvider.ENDPOINT_ADDRESS_PROPERTY属性值:

代码语言:javascript
复制
    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端点中的值。这只需使用以下代码即可完成:

代码语言:javascript
复制
    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端点(如果与生产环境的网络配置兼容)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8588852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档