Search code examples
xmlsoapibm-integration-bus

IIB Prefix to a field


I´m using the IIB 10.0.0.11

When I call my SOAP service with this message:

    <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>

everything work as it should but when I received this message:

<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>

The IIB turn the prefix NS3 and NS4 as a field and i will errors later in the service:

the tree variables in debug:

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 I can resolve this issue for not having the prefix as a field?

the log of what is sending to the service:

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)
            )
          )
        )

Solution

  • I see in your comments that you did not declare the SOAP namespace correctly: It misses the leading http://. Please try it like this:

    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;
    

    And I see as well from your comments and the trace output that you copy data from the Environment; the PCDataField field in the trace tells me that there is no domain information in the Environment (see similiar problem). Here a quote from the InfoCenter

    Copying a message tree (or a portion of it) into the Environment can be useful for many scenarios, but it is essential that the correct domain is created prior to copying the structure. Forgetting to assign the correct domain to the Environment tree before copying the fragment of the input message causes inflation of the tree to occur before the copy happens

    So please copy your input data like this to the Environment:

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