无法从 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.

到目前为止我尝试了什么?

我截取了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 回复“它对我有效”是另一种说法,表明您没有正确地做某事。您需要解决您的请求。

据我所知,错误消息是 StatusTypePriceQuoteTravelItinerary,但您发送的是 statustypepriceQuotetravelItineraryXML is case sensitive,服务字段名称可能也是如此,因此这可能是要检查的第一件事。

那么,您的两个字段(typetravelItinerary)为空。此外,priceQuote 为空。那样行吗?这是接下来要检查的事情。

您漂亮打印的对象显示 JSON 格式。这实际上是您通过网络发送给服务的格式吗? SOAP 需要 XML,而不是 JSON。您还提到您从 WSDL 生成了代码。使用什么框架或库?生成的代码是否发送XML?

就像我说的,你需要解决调用问题:

  1. 下载SoapUI
  2. 将 WSDL 文件提供给 SoapUI,以便它可以为您生成示例请求
  3. 用真实数据填写这些请求并调用 Web 服务,直到返回成功且符合预期的响应
  4. 在您的代码中使用 3) 中的相同参数,使用您的代码执行相同的调用
  5. 使用 SoapUI's monitoring tools 拦截 4) 处的请求并检查您发送的 SOAP 消息
  6. 根据直接使用 SoapUI 获得的成功请求检查您使用代码发出的请求
  7. 更正任何差异,直到您通过代码发出的请求与从 SoapUI 发送的请求相似,并且它 returns 是一个成功的预期响应。

我的请求中缺少一个空元素 <PriceQuote/>

可以通过以下方式添加:

PriceQuoteInfoSearchParameters info = new PriceQuoteInfoSearchParameters();
info.setReservation(reservation);
info.getPriceQuote().add(new PriceQuoteSearch());