我正在尝试使用Sabre API实现预订航班的应用程序。我已经成功创建了PNR,并且正在发行票证。我按照列出的工作流程来预订和发放票证。
要发出票证,我正在遵循此工作流程:
我在发行机票时被困了几天并且已经做了很多工作要克服,但是通过一个或多个步骤,我不知何故被困在某个地方。现在我被困在 DesignatePrinterLLSRQ ,其中包含 ERR.SWS.CLIENT.VALIDATION_FAILED 。
附上我的xml日志: 请求机构:
<SOAP-ENV:Body>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<BagTag LNIATA=""/>
</Printers>
</DesignatePrinterRQ>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<BagTag Undesignate="true"/>
</Printers>
</DesignatePrinterRQ>
</SOAP-ENV:Body>
响应:
<soap-env:Body>
<soap-env:Fault>
<faultcode>soap-env:Client.Validation</faultcode>
<faultstring>ERR.SWS.CLIENT.VALIDATION_FAILED</faultstring>
<detail>
<stl:ApplicationResults xmlns:stl="http://services.sabre.com/STL/v01" status="NotProcessed">
<stl:Error timeStamp="2017-02-10T02:35:51-06:00" type="Validation">
<stl:SystemSpecificResults>
<stl:Message>Request resulted in empty Host Command</stl:Message>
<stl:ShortText>ERR.SWS.CLIENT.VALIDATION_FAILED</stl:ShortText>
</stl:SystemSpecificResults>
</stl:Error>
</stl:ApplicationResults>
</detail>
</soap-env:Fault>
</soap-env:Body>
如果可能,请告诉我工作流程是否存在问题。 此致
答案 0 :(得分:2)
有一个重要的错误,即使你不再得到同样的错误,重要的是突出显示。
在您的请求中,您尝试多次调用该服务并且这是不正确的。您将打开两次DesignatePrinterRQ标记,但这不起作用,因为在关闭第一个DesignatePrinter之后,没有其他任何内容。
以下是您的要求:
<SOAP-ENV:Body>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<BagTag LNIATA=""/>
</Printers>
</DesignatePrinterRQ>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<BagTag Undesignate="true"/>
</Printers>
</DesignatePrinterRQ>
</SOAP-ENV:Body>
以下是应该如何:
<SOAP-ENV:Body>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<BagTag LNIATA=""/>
</Printers>
</DesignatePrinterRQ>
</SOAP-ENV:Body>
-
现在,我不确定您正在开发哪种类型的客户,但BagTag打印机仅供航空公司使用,而非旅行社。您只需要在发出票证之前发送类似的内容:
<SOAP-ENV:Body>
<DesignatePrinterRQ xmlns="http://webservices.sabre.com/sabreXML/2011/10" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0.1">
<Printers>
<Ticket CountryCode="AT">
</Printers>
</DesignatePrinterRQ>
</SOAP-ENV:Body>
为了检查您应该使用哪个CountryCode,请检查 Format Finder。 (您应该能够使用与创建会话相同的凭据)
如果在签发机票时您获得了类似指定HardCopy打印机的信息,请与Sabre取得联系,以便他们尝试禁用硬拷贝打印。
答案 1 :(得分:0)
Sabre拥有虚拟打印机的概念,它不是物理打印机,适用于此类情况,您不希望实际打印某些内容。您需要使用军刀配置虚拟打印机并为其提供行地址。
您的票务工作流程应该是......
确保在签发机票前引用您的行程。
指定打印机时,需要指定国家/地区代码和行地址。我用来做这个的一些代码是......
// Assign a printer
DesignatePrinterRQ designatePrinterRQ = new DesignatePrinterRQ();
designatePrinterRQ.setVersion("2003A.TsabreXML1.2.1");
Printers printers = new Printers();
designatePrinterRQ.setPrinters(printers);
Ticket ticketPrinter = new Ticket();
printers.setTicket(ticketPrinter);
ticketPrinter.setCountryCode("2A");
ticketPrinter.setLineAddress("99999901234540");
在上面的代码中,999999是虚拟打印机,01234540是军刀会话的站代码。