加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

“异常javax.xml.ws.WebServiceException:不支持的端点地址”尝

发布时间:2020-12-15 02:30:07 所属栏目:Java 来源:网络整理
导读:我正在尝试拨打网络服务: http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL 我使用wsimport和JDK1.6.0_29生成了代理类.我的wsimport命令行是: wsimport.exe" -keep -B-XautoNameResolution -d E:mapovmapov-devsharedh
我正在尝试拨打网络服务: http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL

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

wsimport.exe" -keep -B-XautoNameResolution -d E:mapovmapov-devsharedhotel_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);

但是我得到以下异常:

Exception in thread “main” javax.xml.ws.WebServiceException:
Unsupported endpoint address: 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(Fiber.java:600) at
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(Unknown Source)

在大多数示例中,我看到生成的代码包含一个getPort()方法,但尚未为此类生成.我的代码是错误的还是我需要以不同的方式运行wsimport?我也试过调用FreeHotelWebService构造函数而没有产生相同异常的参数.

解决方法

基于Justin和 Tug’s Blog重新提出一个无可挑剔的问题:

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

部署Web Service客户端时,通常需要更改在代码生成期间设置的服务的端点.这篇简短的文章解释了如何在运行时在客户端代码中设置更改它.

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

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

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

第一种方法是使用以下代码更改BindingProvider(Port)的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 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) {

请注意,在Glassfish中,与许多Web服务环境一样,WSDL可以根据用于获取WSDL的URL动态生成端点URL.使用此方法,您还可以动态更改Soap端点(如果与生产环境的网络配置兼容).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读