调用WSDL服务时的javax.xml.ws.WebServiceException

时间:2016-03-12 17:50:32

标签: java web-services api wsdl cxf

我希望使用Travelport Universal API开发航班预订系统,所以我使用了Travelport Developers官方链接作为参考:

Getting Started for Travelport Developers

如文件所述:

  

Travelport Universal API为航空,酒店,汽车和铁路提供一系列旅行内容,包括辅助设施(可选服务)。它还提供了构建完整的旅行者,代理商,分支机构和帐户配置文件的功能。

为了能够发送请求和接收回复,我们应该要求30-Day Trial Credentials for Travelport Universal API,所以我已经要求这个,并且我已经收到了我的凭证,凭证由很多东西组成:

  • 通用API用户ID

  • 通用API密码

  • ProviderName的分支代码(TargetBranch)(ProviderCode)

  • 网址

    我测试了这个凭据,我确信他们正在使用以下链接中的php文件:

    TravelPort Universal API - Ping Request with PHP

    我正在尝试使用eclipse在JAVA中运行Travelport API,并且我按照以下网址中提到的步骤进行操作:

    Setting up to work with Universal API

    我遵循的配置步骤是:

  • 我已将Apache CXF与Tomcat链接

  • 我使用以下链接从GitHub导入项目:

    Travelport/travelport-uapi-tutorial

  • 我已经在WSDLService类中编辑了ENDPOINT_PREFIX,其中包含从Travelport Universal API电子邮件回复的30天试用凭证中收到的URL

  • 我使用WSDL生成了客户端类,我尝试调用该服务,

    但是出现错误:

    Exception in thread "main" javax.xml.ws.WebServiceException: Could not send Message.
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:150)
        at $Proxy48.service(Unknown Source)
        at com.travelport.service.system_v9_0.SystemPingPortType_SystemPingPort_Client.main(SystemPingPortType_SystemPingPort_Client.java:55)
    Caused by: org.apache.cxf.transport.http.HTTPException: HTTP response '404: Not Found' when communicating with http://localhost:8080/kestrel/SystemService
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.doProcessResponseCode(HTTPConduit.java:1600)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1607)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1551)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1348)
        at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
        at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
        at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139)
        ... 2 more
    

    任何人都可以支持我为测试Travelport API所需的步骤,以便我可以发送请求并接收Travelport真实数据的回复吗?

  • 2 个答案:

    答案 0 :(得分:0)

    您需要在生成Java类之后更改连接端点。在运行时,可以使用以下方法完成:

    String endpoint = "https://emea.universal-api.travelport.com/B2BGateway/connect/uAPI";
    BindingProvider provider = (BindingProvider) port;
    Map<String, Object> reqCtx = provider.getRequestContext();
    String connUrl = endpoint.endsWith("/")
                ? endpoint + connUrlSuffix
                : endpoint + "/" + connUrlSuffix;
    reqCtx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, connUrl);
    

    答案 1 :(得分:-2)

    您似乎尝试在端口8080上连接到localhost,但没有服务正在运行。