无法从 Sabre PriceQuoteServicesRQ 4.10 SOAP API 检索数据:XML 请求架构验证失败:PriceQuoteInfo 元素不完整
Unable to retrieve data from Sabre PriceQuoteServicesRQ 4.10 SOAP API: XML request schema validation failed: PriceQuoteInfo element is not complete
我在尝试从管理报价详细信息 (PriceQuoteServicesRQ) 4.10 Sabre SOAP 检索数据时遇到问题 API。
我使用来自 Sabre 网站 (https://developer.sabre.com/docs/soap_apis/air/fulfill/manage_price_quote_details/resources) 的 WSDL 生成了 Java 类。
我正在按以下方式构建我的请求对象:
ReservationTypeShort reservation = new ReservationTypeShort();
reservation.setValue("YEZUYS");
PriceQuoteInfoSearchParameters info = new PriceQuoteInfoSearchParameters();
info.setReservation(reservation);
PriceQuoteSearchParameters searchParameters = new PriceQuoteSearchParameters();
searchParameters.getPriceQuoteInfo().add(info);
searchParameters.setResultType(StringResultType.S);
GetPriceQuoteRQ req = new GetPriceQuoteRQ();
req.setSearchParameters(searchParameters);
req.setVersion("4.1.0");
我漂亮地打印了这个对象,这就是我得到的:
"priceQuoteInfo" : [ {
"reservation" : {
"value" : "YEZUYS",
"createDate" : null
},
"status" : [ ],
"type" : null,
"priceQuote" : [ ],
"travelItinerary" : null
} ],
所以根据他们的文档:
我提供了所有必要的字段,但它仍然对我不起作用。
其他人有同样的问题吗?我在做什么missing/what我做错了吗?
这是我收到的错误消息:
XML request schema validation failed: PriceQuoteInfo element is not complete. One of the following fields: Status, Type, PriceQuote, TravelItinerary should be used. Please amend your request and try again.
到目前为止我尝试了什么?
- 我向 Sabre 支持部门寻求帮助,但他们回复的消息基本上是“我这边有效”。
我截取了XML正文:
<ns5:GetPriceQuoteRQ version="4.1.0">
<ns5:SearchParameters resultType="S">
<ns5:PriceQuoteInfo>
<ns5:Reservation>YEZUYS</ns5:Reservation>
</ns5:PriceQuoteInfo>
</ns5:SearchParameters>
</ns5:GetPriceQuoteRQ>
So according to their documentation I am supplying all fields that are necessary [...]
您所说的文档是指 WSDL 还是一些人类可读的文档(如 PDF、DOCX、网页等)?根据您收到的错误消息,您的 SOAP 请求无效。 Sabre Support 回复“它对我有效”是另一种说法,表明您没有正确地做某事。您需要解决您的请求。
据我所知,错误消息是 Status
、Type
、PriceQuote
和 TravelItinerary
,但您发送的是 status
、type
、priceQuote
和 travelItinerary
。 XML is case sensitive,服务字段名称可能也是如此,因此这可能是要检查的第一件事。
那么,您的两个字段(type
和 travelItinerary
)为空。此外,priceQuote
为空。那样行吗?这是接下来要检查的事情。
您漂亮打印的对象显示 JSON 格式。这实际上是您通过网络发送给服务的格式吗? SOAP 需要 XML,而不是 JSON。您还提到您从 WSDL 生成了代码。使用什么框架或库?生成的代码是否发送XML?
就像我说的,你需要解决调用问题:
- 下载SoapUI
- 将 WSDL 文件提供给 SoapUI,以便它可以为您生成示例请求
- 用真实数据填写这些请求并调用 Web 服务,直到返回成功且符合预期的响应
- 在您的代码中使用 3) 中的相同参数,使用您的代码执行相同的调用
- 使用 SoapUI's monitoring tools 拦截 4) 处的请求并检查您发送的 SOAP 消息
- 根据直接使用 SoapUI 获得的成功请求检查您使用代码发出的请求
- 更正任何差异,直到您通过代码发出的请求与从 SoapUI 发送的请求相似,并且它 returns 是一个成功的预期响应。
我的请求中缺少一个空元素 <PriceQuote/>
。
可以通过以下方式添加:
PriceQuoteInfoSearchParameters info = new PriceQuoteInfoSearchParameters();
info.setReservation(reservation);
info.getPriceQuote().add(new PriceQuoteSearch());
我在尝试从管理报价详细信息 (PriceQuoteServicesRQ) 4.10 Sabre SOAP 检索数据时遇到问题 API。
我使用来自 Sabre 网站 (https://developer.sabre.com/docs/soap_apis/air/fulfill/manage_price_quote_details/resources) 的 WSDL 生成了 Java 类。
我正在按以下方式构建我的请求对象:
ReservationTypeShort reservation = new ReservationTypeShort();
reservation.setValue("YEZUYS");
PriceQuoteInfoSearchParameters info = new PriceQuoteInfoSearchParameters();
info.setReservation(reservation);
PriceQuoteSearchParameters searchParameters = new PriceQuoteSearchParameters();
searchParameters.getPriceQuoteInfo().add(info);
searchParameters.setResultType(StringResultType.S);
GetPriceQuoteRQ req = new GetPriceQuoteRQ();
req.setSearchParameters(searchParameters);
req.setVersion("4.1.0");
我漂亮地打印了这个对象,这就是我得到的:
"priceQuoteInfo" : [ {
"reservation" : {
"value" : "YEZUYS",
"createDate" : null
},
"status" : [ ],
"type" : null,
"priceQuote" : [ ],
"travelItinerary" : null
} ],
所以根据他们的文档:
其他人有同样的问题吗?我在做什么missing/what我做错了吗?
这是我收到的错误消息:
XML request schema validation failed: PriceQuoteInfo element is not complete. One of the following fields: Status, Type, PriceQuote, TravelItinerary should be used. Please amend your request and try again.
到目前为止我尝试了什么?
- 我向 Sabre 支持部门寻求帮助,但他们回复的消息基本上是“我这边有效”。
我截取了XML正文:
<ns5:GetPriceQuoteRQ version="4.1.0">
<ns5:SearchParameters resultType="S">
<ns5:PriceQuoteInfo>
<ns5:Reservation>YEZUYS</ns5:Reservation>
</ns5:PriceQuoteInfo>
</ns5:SearchParameters>
</ns5:GetPriceQuoteRQ>
So according to their documentation I am supplying all fields that are necessary [...]
您所说的文档是指 WSDL 还是一些人类可读的文档(如 PDF、DOCX、网页等)?根据您收到的错误消息,您的 SOAP 请求无效。 Sabre Support 回复“它对我有效”是另一种说法,表明您没有正确地做某事。您需要解决您的请求。
据我所知,错误消息是 Status
、Type
、PriceQuote
和 TravelItinerary
,但您发送的是 status
、type
、priceQuote
和 travelItinerary
。 XML is case sensitive,服务字段名称可能也是如此,因此这可能是要检查的第一件事。
那么,您的两个字段(type
和 travelItinerary
)为空。此外,priceQuote
为空。那样行吗?这是接下来要检查的事情。
您漂亮打印的对象显示 JSON 格式。这实际上是您通过网络发送给服务的格式吗? SOAP 需要 XML,而不是 JSON。您还提到您从 WSDL 生成了代码。使用什么框架或库?生成的代码是否发送XML?
就像我说的,你需要解决调用问题:
- 下载SoapUI
- 将 WSDL 文件提供给 SoapUI,以便它可以为您生成示例请求
- 用真实数据填写这些请求并调用 Web 服务,直到返回成功且符合预期的响应
- 在您的代码中使用 3) 中的相同参数,使用您的代码执行相同的调用
- 使用 SoapUI's monitoring tools 拦截 4) 处的请求并检查您发送的 SOAP 消息
- 根据直接使用 SoapUI 获得的成功请求检查您使用代码发出的请求
- 更正任何差异,直到您通过代码发出的请求与从 SoapUI 发送的请求相似,并且它 returns 是一个成功的预期响应。
我的请求中缺少一个空元素 <PriceQuote/>
。
可以通过以下方式添加:
PriceQuoteInfoSearchParameters info = new PriceQuoteInfoSearchParameters();
info.setReservation(reservation);
info.getPriceQuote().add(new PriceQuoteSearch());