Возвращение Null для некоторой части передачи свойства soapUI - PullRequest
0 голосов
/ 15 февраля 2019

Я получаю значение NULL для свойств в конкретном элементе.Любой атрибут или значение узла, которое я пытаюсь передать в теге «NDCMSG_Payload», дает ноль.Я могу передать свойство в теге NDCMSG_Header.Я надеюсь, что кто-то обнаружит проблему.

Код передачи свойства с пространством имен:

declare namespace soap="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace ns2="http://sita.aero/NDC/NDCUtility/v1";
declare namespace xmlns="http://www.iata.org/IATA/EDIST/2017.2";
/soap:Envelope/soap:Body/ns2:NDCMSG_Envelope/NDCMSG_Body/NDCMSG_Payload/OrderViewRS/Document

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:NDCMSG_Envelope xmlns:ns2="http://sita.aero/NDC/NDCUtility/v1">
         <NDCMSG_Header>              
            <MessageId>ID-1548230775813-0-48297-2</MessageId>
         </NDCMSG_Header>
         <NDCMSG_Body>
            <NDCMSG_Payload>
               <OrderViewRS PrimaryLangID="en" Target="Test" TimeStamp="2019-02-15T11:05:12.305+00:00" Version="16.23" xmlns="http://www.iata.org/IATA/EDIST/2017.2">
                  <Document id="PGU8NA">
                     <Name>Air Canada</Name>
                     <ReferenceVersion>UAT-OTA-2010B</ReferenceVersion>
                  </Document>
            </NDCMSG_Payload>
         </NDCMSG_Body>
      </ns2:NDCMSG_Envelope>
    </soap:Body>
</soap:Envelope>

1 Ответ

0 голосов
/ 15 февраля 2019

Я думаю, что проблема в OrderViewRS, который объявляет общее пространство имен:

xmlns="http://www.iata.org/IATA/EDIST/2017.2"

В вашем xpath оно объявлено, но у вас также есть элементы более высокого уровня, которых нет в этом пространстве имен.Когда я присваиваю этому пространству имен конкретное имя и добавляю это пространство имен к тегам на этом уровне и глубже, xpath работает так, как задумано.

declare namespace soap="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace ns2="http://sita.aero/NDC/NDCUtility/v1";
declare namespace ns3="http://www.iata.org/IATA/EDIST/2017.2";
/soap:Envelope/soap:Body/ns2:NDCMSG_Envelope/NDCMSG_Body/NDCMSG_Payload/ns3:OrderViewRS/ns3:Document/ns3:Name

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:NDCMSG_Envelope xmlns:ns2="http://sita.aero/NDC/NDCUtility/v1">
         <NDCMSG_Header>              
            <MessageId>ID-1548230775813-0-48297-2</MessageId>
         </NDCMSG_Header>
         <NDCMSG_Body>
            <NDCMSG_Payload>
               <ns3:OrderViewRS PrimaryLangID="en" Target="Test" TimeStamp="2019-02-15T11:05:12.305+00:00" Version="16.23" xmlns:ns3="http://www.iata.org/IATA/EDIST/2017.2">
                  <ns3:Document id="PGU8NA">
                     <ns3:Name>Air Canada</ns3:Name>
                     <ns3:ReferenceVersion>UAT-OTA-2010B</ns3:ReferenceVersion>
                  </ns3:Document>
               </ns3:OrderViewRS>
            </NDCMSG_Payload>
         </NDCMSG_Body>
      </ns2:NDCMSG_Envelope>
    </soap:Body>
</soap:Envelope>

Возможно, вы захотите выполнить передачу свойства как тестовый шаг Groovy Script, используя XML Slurper.Это может выглядеть примерно так:

def xml = context.expand( '${TestStepName#Response}' )
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder(xml)
def response = new XmlSlurper().parseText(holder.getXml())
def value = response.Body.NDCMSG_Envelope.NDCMSG_Body.NDCMSG_Payload.OrderViewRS.Document.Name
return value

Тем самым обходя проблему пространства имен.Результат этого шага должен легко переноситься.

...