Префикс IIB к полю - PullRequest
       8

Префикс IIB к полю

0 голосов
/ 26 сентября 2018

Я использую IIB 10.0.0.11

Когда я звоню в службу SOAP с этим сообщением:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="urn://hfgroup.co.ke/SharedResources/Schemas/SOAMessages/SoapHeader" xmlns:com="urn://hfgroup.co.ke/Common/DataModel/Common/SecureGetBusinessDate/1.0/Common.SecureGetBusinessDate" xmlns:ns="urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0">
   <soapenv:Header>
      <soap:HeaderRequest>
         <soap:Control>
            <soap:RequesterSystemCode>013</soap:RequesterSystemCode>
            <soap:MessageID>45</soap:MessageID>
         </soap:Control>
         <soap:Credentials>
            <soap:Credential>
               <soap:Username>ESBAPP01</soap:Username>
               <soap:Password>!@#$_!K@O#C$E%L^A*_$#@!</soap:Password>
            </soap:Credential>
         </soap:Credentials>
      </soap:HeaderRequest>
   </soapenv:Header>
   <soapenv:Body>
      <com:DataInput>
         <com:SecureGetBusinessDateInput>
            <ns:Security>
               <ns:ChannelId>99997</ns:ChannelId>
            </ns:Security>
         </com:SecureGetBusinessDateInput>
      </com:DataInput>
   </soapenv:Body>
</soapenv:Envelope>

все работает, как должно, но когда я получил это сообщение:

<NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/"  >
   <NS1:Header>
      <NS2:HeaderRequest xmlns:NS2="urn://hfgroup.co.ke/SharedResources/Schemas/SOAMessages/SoapHeader">
         <NS2:Control>
            <NS2:RequesterSystemCode>013</NS2:RequesterSystemCode>
            <NS2:MessageID>49</NS2:MessageID>
         </NS2:Control>
         <NS2:Credentials>
            <NS2:Credential>
               <NS2:Username>ESBAPP01</NS2:Username>
               <NS2:Password>!@#$_!K@O#C$E%L^A*_$#@!</NS2:Password>
            </NS2:Credential>
         </NS2:Credentials>
      </NS2:HeaderRequest>
   </NS1:Header>
   <NS1:Body>
      <NS3:DataInput xmlns:NS3="urn://hfgroup.co.ke/Common/DataModel/Common/SecureGetBusinessDate/1.0/Common.SecureGetBusinessDate">
         <NS3:SecureGetBusinessDateInput>
            <NS4:Security xmlns:NS4="urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0">
               <NS4:ChannelId>99997</NS4:ChannelId>
            </NS4:Security>
         </NS3:SecureGetBusinessDateInput>
      </NS3:DataInput>
   </NS1:Body>
</NS1:Envelope>

IIB превратит префикс NS3 и NS4 в поле, и позже в сервисе появятся ошибки:

переменные дерева в отладке:

SOAP
    Context
           Namespace
                    NS1:CHARACTER:http://schemas.xmlsoap.org/soap/envelope/

Body
    DataInput
            NS3:CHARACTER:urn://hfgroup.co.ke/Common/DataModel/Common/SecureGetBusinessDate/1.0/Common.SecureGetBusinessDate
            SecureGetBusinessDateInput
                    Security
                            NS4:CHARACTER:urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0
                            ChannelId:CHARACTER:99997

howЯ могу решить эту проблему из-за отсутствия префикса в качестве поля?

журнал того, что отправляется службе:

0x03000102:NamespaceDecl):xmlns                                           = 'urn://hfgroup.co.ke/Common/DataModel/Common/GetBusinessDate/1.0/Common.GetBusinessDate' (CHARACTER)
      (0x03000102:NamespaceDecl)xmlns:nsS100                                     = 'urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0' (CHARACTER)
      (0x03000102:NamespaceDecl)xmlns:soapenv                                    = 'http://schemas.xmlsoap.org/soap/envelope/' (CHARACTER)
      (0x01000000:Folder       )http://schemas.xmlsoap.org/soap/envelope/:Body   = (
        (0x01000000:Folder)urn://hfgroup.co.ke/Common/DataModel/Common/GetBusinessDate/1.0/Common.GetBusinessDate:DataInput = (
          (0x01000000:Folder)urn://hfgroup.co.ke/Common/DataModel/Common/GetBusinessDate/1.0/Common.GetBusinessDate:GetBusinessDateInput = (
            (0x01000000:Folder)urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0:Security = (
              (0x03000000:PCDataField)http://www.w3.org/2000/xmlns/:NS4                              = 'urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0' (CHARACTER)
              (0x03000000:PCDataField)urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0:ChannelId = '99997' (CHARACTER)
              (0x03000000:PCDataField)urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0:CoreToken = 'Z]XWVUTSr>P<NW>Mw;MZ' (CHARACTER)
            )
          )
        )

1 Ответ

0 голосов
/ 26 сентября 2018

Я вижу в ваших комментариях, что вы неправильно объявили пространство имен SOAP: оно пропускает ведущий http://.Пожалуйста, попробуйте это так:

DECLARE ns250 NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/';
DECLARE nszF00 NAMESPACE 'urn://hfgroup.co.ke/Common/DataModel/Common/GetBusinessDate/1.0/Common.GetBusinessDate';
DECLARE nsS100 NAMESPACE 'urn://hfgroup.co.ke/CanonicalDataModel/Security/1.0';
SET OutputRoot.XMLNSC.ns250:Envelope.(XMLNSC.NamespaceDecl)xmlns = nszF00;
SET OutputRoot.XMLNSC.ns250:Envelope.(XMLNSC.NamespaceDecl)xmlns:nsS100 = nsS100;
SET OutputRoot.XMLNSC.ns250:Envelope.(XMLNSC.NamespaceDecl)xmlns:soapenv = ns250;

И я также вижу из ваших комментариев и результатов трассировки, что вы копируете данные из Environment;поле PCDataField в трассировке говорит мне, что в Environment нет информации о домене (см. аналогичная проблема ).Вот цитата из ИнфоЦентра

Копирование дерева сообщений (или его части) в Среду может быть полезным для многих сценариев, но важно, чтобы правильный доменсоздается до копирования структуры.Если вы забыли назначить правильный домен для дерева Среды перед копированием фрагмента входного сообщения, произойдет инфляция дерева до того, как произойдет копирование

Поэтому, пожалуйста, скопируйте ваши входные данные, такие как этот, в Environment:

CREATE LASTCHILD OF Environment DOMAIN 'XMLNSC' FROM InputRoot.XMLNSC;
...