我一直在寻找使用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(ProviderCode)的分支代码(TargetBranch)
网址
我测试了此凭据,并且我确信它们正在使用来自以下链接的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
我已使用从Travelport Universal API电子邮件的30天试用证书获得的URL编辑了WSDLService类中的ENDPOINT_PREFIX。
我使用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的真实数据发送请求并接收响应吗?
最佳答案
生成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);