API Connect

API Connect

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.

 View Only
Expand all | Collapse all

map policy

  • 1.  map policy

    Posted 14 days ago

    Dears , 

         appreciate your support i have this field in xml need to get the output of map policy same as below : 

                    <ns3:accountIdSet xmlns:ns3="http://www.banqueaudi.com/ebo/psa.cmn.Identifiers">
                        <ns3:accountId format="Local" domiciliation="Local">123456789</ns3:accountId>
                   </ns3:accountIdSet> 
    but i get the result as below always :
                 <ns3:accountIdSet>
                        <ns3:accountId domiciliation="Local" format="Local" /> 
                 </ns3:accountIdSet>
    this is the map policy mapping 
                  actions:
                 
                    - create: accountIdSet.accountId
                      foreach: accountIdSet
                      from: accountIdSet
                      actions:
                        - set: '@format'
                          from: accountId.format
                        - set: '@domiciliation'
                          from: accountId.domiciliation
    the xml definition is :
                accountIdSet:
                  type: array
                  items:
                    type: object
                    xml:
                      namespace: http://www.banqueaudi.com/ebo/psa.cmn.Identifiers
                      prefix: ns3
                      wrapped: true
                    properties:
                      accountId:
                        type: object
                        xml:
                          wrapped: true
                        minItems: 1
                        properties:
                          domiciliation:
                            xml:
                              namespace: ''
                              attribute: true
                            description: >-
                              A hint that this account id is a local, domestic, or
                              international institution account id
                            type: string
                            enum:
                              - Local
                              - Domestic
                              - International
                          format:
                            xml:
                              namespace: ''
                              attribute: true
                            description: An indication of the format of this accountId
                            type: string
                            enum:
                              - Local
                              - GL
                              - IBAN
                              - Other
                              - Unknown
                              - Display
                              - OldAccount
                              - OldIBAN
                              - FCUBSAccount

    appreciate your support to solve this issue ...
    i tried to make the accountId as array but didn't work also 


    ------------------------------
    Ahmed Elaimy
    ------------------------------


  • 2.  RE: map policy

    Posted 13 days ago

    Hi,

    I'm not sure what you are exactly trying to do in terms of inputs and outputs but the MAP policy offers a Definition called "Inline schema" that you can use to build XML structures for input and output that should help you map your fields and set your output format.



    ------------------------------
    Nick Cawood
    API Connect Consultant
    IBM Expert Labs
    IBM UK Ltd

    https://www.linkedin.com/in/nickcawood/
    ------------------------------



  • 3.  RE: map policy

    Posted 12 days ago

    Hi Ahmed,

    I noticed that you also started a thread in the appropriate API Connect group, so I'll add my response here as well to continue the conversation in this topic group.

    From your description, it sounds like you're expecting the output to include a value inside the <accountId> element (123456789), but it's showing up as empty with only the attributes. If that's the case, it's likely because the text content of the element is not being explicitly set in your map policy. Can you try this?

               - createaccountIdSet.accountId
                  foreachaccountIdSet
                  fromaccountIdSet
                  value: accountId
                  actions:
                    - set'@format'
                      fromaccountId.format
                    - set'@domiciliation'
                      fromaccountId.domiciliation

    Would you be able to share your assambly yaml? This way I can try and recreate your issue to see what is going wrong.


    ------------------------------
    Francis Cocx
    Integration Engineer
    Rijkevorsel
    ------------------------------



  • 4.  RE: map policy

    Posted 10 days ago
    Edited by Ahmed Elaimy 10 days ago
      dear Francis this is the full assemply , knowing that the atrributes "format & domnicilation " are read from the same path as the accountId value , 
    appreciate your kind support the solution you offered is not working unfortunately ,
    assembly:
        execute:
          - parse:
              version: 2.2.0
              title: parse
              parse-settings-reference:
                default: apic-default-parsesettings
          - map:
              inputs:
                input:
                  schema:
                    $ref: '#/definitions/getAccountListInput'
                  variable: request.body
                  content: application/xml
              outputs:
                output:
                  schema:
                    $ref: '#/definitions/getAccountListReq'
                  variable: message.body
                  content: application/json
              actions:
                - set: output.getAccountList.header.ebmCID
                  from: input.Envelope.Body.getAccountList.header.ebmCID
                - set: output.getAccountList.header.ebmMID
                  from: input.Envelope.Body.getAccountList.header.ebmMID
                - set: output.getAccountList.header.ebmRTID
                  from: input.Envelope.Body.getAccountList.header.ebmRTID
                - set: output.getAccountList.header.ebmPID
                  from: input.Envelope.Body.getAccountList.header.ebmPID
                - set: output.getAccountList.header.ebmSID
                  from: input.Envelope.Body.getAccountList.header.ebmSID
                - set: output.getAccountList.header.ebmTimestamp
                  from: input.Envelope.Body.getAccountList.header.ebmTimestamp
                - set: output.getAccountList.header.bankEntityId
                  from: input.Envelope.Body.getAccountList.header.bankEntityId
                - set: output.getAccountList.header.userID
                  from: input.Envelope.Body.getAccountList.header.userID
                - set: output.getAccountList.body.customerId
                  from: input.Envelope.Body.getAccountList.body.customerId
              version: 2.1.0
              title: map
              options:
                mapEmulateV4EmptyJSONObject: false
                mapEmulateV4DefaultRequiredProps: false
                mapEnablePostProcessingJSON: false
                mapReferenceLimit: 1
          - invoke:
              version: 2.0.0
              title: invoke
              backend-type: detect
              header-control:
                type: blocklist
                values: []
              parameter-control:
                type: blocklist
                values: []
              timeout: 60
              verb: keep
              chunked-uploads: true
              persistent-connection: true
              target-url: >-
              output: varResp
          - map:
              inputs:
                input:
                  schema:
                    $ref: '#/definitions/getAccountListResp'
                  variable: varResp.body
                  content: application/json
              outputs:
                output:
                  schema:
                    $ref: '#/definitions/getAccountListOutput'
                  variable: message.body
                  content: application/xml
              actions:
                - set: output.Envelope.Body.getAccountListResponse.header.ebmCID
                  from: input.getAccountListResponse.header.ebmCID
                - set: output.Envelope.Body.getAccountListResponse.header.ebmMID
                  from: input.getAccountListResponse.header.ebmMID
                - set: output.Envelope.Body.getAccountListResponse.header.ebmRTID
                  from: input.getAccountListResponse.header.ebmRTID
                - set: output.Envelope.Body.getAccountListResponse.header.ebmPID
                  from: input.getAccountListResponse.header.ebmPID
                - set: output.Envelope.Body.getAccountListResponse.header.ebmSID
                  from: input.getAccountListResponse.header.ebmSID
                - set: output.Envelope.Body.getAccountListResponse.header.ebmTimestamp
                  from: input.getAccountListResponse.header.ebmTimestamp
                - set: output.Envelope.Body.getAccountListResponse.header.bankEntityId
                  from: input.getAccountListResponse.header.bankEntityId
                - set: output.Envelope.Body.getAccountListResponse.header.userID
                  from: input.getAccountListResponse.header.userID
                - set: output.Envelope.Body.getAccountListResponse.header.propertySet
                  from: input.getAccountListResponse.header.propertySet
                - set: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  from: input.getAccountListResponse.header.propertySet.property
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreach: input.getAccountListResponse.header.propertySet.property
                  from: input.getAccountListResponse.header.propertySet.property
                  actions:
                    - set: '@name'
                      from: name
                    - set: '@description'
                      from: description
                    - set: '@type'
                      from: type
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreach: input.getAccountListResponse.header.propertySet
                  from: input.getAccountListResponse.header.propertySet
                  actions:
                    - create: value
                      foreach: property
                      from: property
                      actions:
                        - set: $item
                          from: value
                - create: >-
                    output.Envelope.Body.getAccountListResponse.body.accountSummaryList.accountSummary
                  foreach: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  from: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  actions:
                    - set: '@showBalances'
                      from: showBalances
                    - set: '@balanceSheet'
                      from: balanceSheet
                    - create: accountIdSet.accountId
                      foreach: accountIdSet
                      from: accountIdSet
                      value: accountId.accountId
                      actions:
                        - set: '@format'
                          from: accountId.format
                        - set: '@domiciliation'
                          from: accountId.domiciliation
                    - set: customerSummaryList.customerSummary.customerId
                      from: customerSummaryList.customerSummary.customerId
                    - set: customerSummaryList.customerSummary.name
                      from: customerSummaryList.customerSummary.name
                    - set: branchSummary.branchId
                      from: branchSummary.branchId
                    - set: branchSummary.branchName
                      from: branchSummary.branchName
                    - set: currency
                      from: currency
                    - set: accountType
                      from: accountType
                    - set: jointAccount
                      from: jointAccount
                    - set: status
                      from: status
                    - set: activityDates
                      from: activityDates
                    - set: balances.minimumBalance.value.@debitOrCredit
                      from: balances.minimumBalance.value.debitOrCredit
                    - set: balances.minimumBalance.value.amount
                      from: balances.minimumBalance.value.amount
                    - set: balances.minimumBalance.value.currency
                      from: balances.minimumBalance.value.currency
                    - set: balances.minimumBalance.counterValue.@debitOrCredit
                      from: balances.minimumBalance.counterValue.debitOrCredit
                    - set: balances.minimumBalance.counterValue.amount
                      from: balances.minimumBalance.counterValue.amount
                    - set: balances.minimumBalance.counterValue.currency
                      from: balances.minimumBalance.counterValue.currency
                    - set: balances.book.value.@debitOrCredit
                      from: balances.book.value.debitOrCredit
                    - set: balances.book.value.amount
                      from: balances.book.value.amount
                    - set: balances.book.value.currency
                      from: balances.book.value.currency
                    - set: balances.book.counterValue.@debitOrCredit
                      from: balances.book.counterValue.debitOrCredit
                    - set: balances.book.counterValue.amount
                      from: balances.book.counterValue.amount
                    - set: balances.book.counterValue.currency
                      from: balances.book.counterValue.currency
                    - set: balances.available.value.@debitOrCredit
                      from: balances.available.value.debitOrCredit
                    - set: balances.available.value.amount
                      from: balances.available.value.amount
                    - set: balances.available.value.currency
                      from: balances.available.value.currency
                    - set: balances.available.counterValue.@debitOrCredit
                      from: balances.available.counterValue.debitOrCredit
                    - set: balances.available.counterValue.amount
                      from: balances.available.counterValue.amount
                    - set: balances.available.counterValue.currency
                      from: balances.available.counterValue.currency
                    - set: balances.valueDate.value.@debitOrCredit
                      from: balances.valueDate.value.debitOrCredit
                    - set: balances.valueDate.value.amount
                      from: balances.valueDate.value.amount
                    - set: balances.valueDate.value.currency
                      from: balances.valueDate.value.currency
                    - set: balances.valueDate.counterValue.@debitOrCredit
                      from: balances.valueDate.counterValue.debitOrCredit
                    - set: balances.valueDate.counterValue.amount
                      from: balances.valueDate.counterValue.amount
                    - set: balances.valueDate.counterValue.currency
                      from: balances.valueDate.counterValue.currency
                    - set: balances.unclearedFunds.value.@debitOrCredit
                      from: balances.unclearedFunds.value.debitOrCredit
                    - set: balances.unclearedFunds.value.amount
                      from: balances.unclearedFunds.value.amount
                    - set: balances.unclearedFunds.value.currency
                      from: balances.unclearedFunds.value.currency
                    - set: balances.unclearedFunds.counterValue.@debitOrCredit
                      from: balances.unclearedFunds.counterValue.debitOrCredit
                    - set: balances.unclearedFunds.counterValue.amount
                      from: balances.unclearedFunds.counterValue.amount
                    - set: balances.unclearedFunds.counterValue.currency
                      from: balances.unclearedFunds.counterValue.currency
                    - set: balances.netBalance.value.@debitOrCredit
                      from: balances.netBalance.value.debitOrCredit
                    - set: balances.netBalance.value.amount
                      from: balances.netBalance.value.amount
                    - set: balances.netBalance.value.currency
                      from: balances.netBalance.value.currency
                    - set: balances.netBalance.counterValue.@debitOrCredit
                      from: balances.netBalance.counterValue.debitOrCredit
                    - set: balances.netBalance.counterValue.amount
                      from: balances.netBalance.counterValue.amount
                    - set: balances.netBalance.counterValue.currency
                      from: balances.netBalance.counterValue.currency
                    - set: balances.holdAmount.value.@debitOrCredit
                      from: balances.holdAmount.value.debitOrCredit
                    - set: balances.holdAmount.value.amount
                      from: balances.holdAmount.value.amount
                    - set: balances.holdAmount.value.currency
                      from: balances.holdAmount.value.currency
                    - set: balances.holdAmount.counterValue.@debitOrCredit
                      from: balances.holdAmount.counterValue.debitOrCredit
                    - set: balances.holdAmount.counterValue.amount
                      from: balances.holdAmount.counterValue.amount
                    - set: balances.holdAmount.counterValue.currency
                      from: balances.holdAmount.counterValue.currency
                    - set: balances.outstandingAmount.value.@debitOrCredit
                      from: balances.outstandingAmount.value.debitOrCredit
                    - set: balances.outstandingAmount.value.amount
                      from: balances.outstandingAmount.value.amount
                    - set: balances.outstandingAmount.value.currency
                      from: balances.outstandingAmount.value.currency
                    - set: balances.outstandingAmount.counterValue.@debitOrCredit
                      from: balances.outstandingAmount.counterValue.debitOrCredit
                    - set: balances.outstandingAmount.counterValue.amount
                      from: balances.outstandingAmount.counterValue.amount
                    - set: balances.outstandingAmount.counterValue.currency
                      from: balances.outstandingAmount.counterValue.currency
                    - set: balances.unutilizedAmount.value.@debitOrCredit
                      from: balances.unutilizedAmount.value.debitOrCredit
                    - set: balances.unutilizedAmount.value.amount
                      from: balances.unutilizedAmount.value.amount
                    - set: balances.unutilizedAmount.value.currency
                      from: balances.unutilizedAmount.value.currency
                    - set: balances.unutilizedAmount.counterValue.@debitOrCredit
                      from: balances.unutilizedAmount.counterValue.debitOrCredit
                    - set: balances.unutilizedAmount.counterValue.amount
                      from: balances.unutilizedAmount.counterValue.amount
                    - set: balances.unutilizedAmount.counterValue.currency
                      from: balances.unutilizedAmount.counterValue.currency
                    - set: balances.totalAvailable.value.@debitOrCredit
                      from: balances.totalAvailable.value.debitOrCredit
                    - set: balances.totalAvailable.value.amount
                      from: balances.totalAvailable.value.amount
                    - set: balances.totalAvailable.value.currency
                      from: balances.totalAvailable.value.currency
                    - set: balances.totalAvailable.counterValue.@debitOrCredit
                      from: balances.totalAvailable.counterValue.debitOrCredit
                    - set: balances.totalAvailable.counterValue.amount
                      from: balances.totalAvailable.counterValue.amount
                    - set: balances.totalAvailable.counterValue.currency
                      from: balances.totalAvailable.counterValue.currency
                    - set: balances.blockedAmount.value.@debitOrCredit
                      from: balances.blockedAmount.value.debitOrCredit
                    - set: balances.blockedAmount.value.amount
                      from: balances.blockedAmount.value.amount
                    - set: balances.blockedAmount.value.currency
                      from: balances.blockedAmount.value.currency
                    - set: balances.blockedAmount.counterValue.@debitOrCredit
                      from: balances.blockedAmount.counterValue.debitOrCredit
                    - set: balances.blockedAmount.counterValue.amount
                      from: balances.blockedAmount.counterValue.amount
                    - set: balances.blockedAmount.counterValue.currency
                      from: balances.blockedAmount.counterValue.currency
                    - create: propertySet.property
                      foreach: propertySet
                      from: propertySet
                      actions:
                        - set: '@name'
                          from: property.name
                        - set: value
                          from: property.value
                    - create: associatedProductSet.associatedProduct
                      foreach: associatedProductSet.associatedProduct
                      from: associatedProductSet.associatedProduct
                      actions:
                        - set: type
                          from: type
                        - set: isAvailable
                          from: isAvailable
                        - set: limitSet.limit.type
                          from: limitSet.limit.type
                        - set: limitSet.limit.limitAmount
                          from: limitSet.limit.limitAmount
              version: 2.1.0
              title: map
              options:
                mapEmulateV4EmptyJSONObject: false
                mapEmulateV4DefaultRequiredProps: false
                mapEnablePostProcessingJSON: false
                mapReferenceLimit: 1
                mapNullValue: true
                includeEmptyXMLElements: null
                falsecatch: null



    ------------------------------
    Ahmed Elaimy
    ------------------------------



  • 5.  RE: map policy

    Posted 10 days ago

    Key steps of the API lifecycle include create, secure, manage, socialize, monetize, and analyze.

    Key phases of the API lifecycle:

    Create:Develop and write API definitions from an API development environment, eventually bundling these APIs into consumable products, and deploying them to production environments.

    Secure:

    Leverage the best-in-class API Gateway, gateway policies, and more, to manage access to your APIs and back-end systems.

    Manage:

     Governance structures are built in to the entire API lifecycle, from managing the view/edit permissions of APIs and Products being deployed, to managing what application developers can view and subscribe to when APIs are deployed.

    Socialize:

     API Connect comes with an advanced Developer Portal that streamlines the onboarding process of application developers, and can be completely customized to an organization's marketing standards.

    Monetize:

     Bundle APIs into Products and Plans with monetization schemes that are built into those Plans, thereby opening up digital revenue streams.

    Analyze: Developers and Product Managers alike are given the tooling in API Connect to understand their API traffic patterns, latency, consumption, and more to make data driven insights into their API initiatives.

    Thanks!

    Great platform for connecting resources from every corner of the world.



    ------------------------------
    Samhita Pal
    ------------------------------



  • 6.  RE: map policy

    Posted 12 days ago

    Hi Ahmed,

    I keep prefacing my posts by saying I'm retired and don't have any mechanism to try this anymore, but your array child actions only map your attributes, not the value of the element itself.  I'm not sure if the UI will do this for you, but try adding to your create action in the source view

                    - createaccountIdSet.accountId
                      foreachaccountIdSet
                      fromaccountIdSet
                      actions:
                        - set'@format'
                          fromaccountId.format
                        - set'@domiciliation'
                          fromaccountId.domiciliation
                        - set: $item
                          from: accountId.accountfieldname
    You didn't show what your input data looks like so I'm assuming the input accountId array must have some account number property in it, and for the child actions of the create, $item is saying the current value, not a child property such as the attributes.
    Best Regards,
    Steve Linn


    ------------------------------
    Steve Linn
    Senior Consulting I/T Specialist
    IBM Retired
    ------------------------------



  • 7.  RE: map policy

    Posted 10 days ago

    Hi Ahmed, 

    Thankyou for providing the full assembly. I did a test and can confirm that the reply @Steve Linn posted is the correct way of doing this. Important to note is that for this to work the element 'accountId' needs to be defined as the correct type in the definition. I would assume as String in this case and not as an Object.

    Testing this gave me the following result:

    Actions:

     actions:
    	- set: '@format'
    	  from: accountId.format
    	- set: '@domiciliation'
    	  from: accountId.domiciliation
    	- set: $item
    	  from: accountId.value

    TestRequest:

    {
        "accountId": [
            {
                "format": "Local",
                "domiciliation": "Local",
                "value": "123456789"
            },
            {
                "format": "IBAN",
                "domiciliation": "International",
                "value": "LB123456789012345678901234"
            },
            {
                "format": "GL",
                "domiciliation": "Domestic",
                "value": "987654321"
            }
        ]
    }


    TestResponse:

    <?xml version="1.0" encoding="UTF-8"?>
    <accountIdSet>
        <accountId format="Local" domiciliation="Local">123456789</accountId>
        <accountId format="IBAN" domiciliation="International">LB123456789012345678901234</accountId>
        <accountId format="GL" domiciliation="Domestic">987654321</accountId>
    </accountIdSet>


    ------------------------------
    Francis Cocx
    Integration Engineer
    Rijkevorsel
    ------------------------------



  • 8.  RE: map policy

    Posted 10 days ago

    Hi Ahmed and Francis,

    Actually for an xml definition, attributes are children of the element property, so although the value is a scalar type, you must specify it as an object so the map policy will traverse the definition into the children properties to pick up the attributes.

    Best Regards,

    Steve Linn



    ------------------------------
    Steve Linn
    Senior Consulting I/T Specialist
    IBM Retired
    ------------------------------



  • 9.  RE: map policy

    Posted 10 days ago
    Edited by Francis Cocx 10 days ago

    Hi Steve,

    So far I was unable to set a value to the accountId element when defining it as type object in my definition. Not sure if I am doing something wrong?

    If I just set it as string I am still able to add and set the attributes and value.

    <accountId format="Local" domiciliation="Local">123456789</accountId>
    However, if I create the definition like bellow it just creates an extra element value underneed the accountId Object:
        accountId:
          type: object
          xml:
            name: accountId
            prefix: ns3
            namespace: http://www.banqueaudi.com/ebo/psa.cmn.Identifiers
          properties:
            format:
              type: string
              enum:
                - Local
                - GL
                - IBAN
                - Other
                - Unknown
                - Display
                - OldAccount
                - OldIBAN
                - FCUBSAccount
              xml:
                attribute: true
            domiciliation:
              type: string
              enum:
                - Local
                - Domestic
                - International
              xml:
                attribute: true
            value:
              type: string
    Result:
    <accountId format="Local" domiciliation="Local">
    	<value>123456789</value>
    </accountId>
    Regards



    ------------------------------
    Francis Cocx
    Integration Engineer
    Rijkevorsel
    ------------------------------



  • 10.  RE: map policy

    Posted 6 days ago

    Hi Francis,
      Your definition is incorrect.  XML element (definition property) accountId does not have a child property named "value".  The mapping must go directly to the accountId property.  In the case of an array, you have a child action for the create action, and you must specify $item as the set property.  You must have done that in your first attempt.  Hard to believe it has been 9 years since I wrote the map policy and I can't remember now if I put special code to traverse the definition if you had a properties property for a scalar such as a string, or if I traversed only for type object or array.  You'll need to test and verify as I don't have access to the code anymore.

    Best Regards,

    Steve Linn



    ------------------------------
    Steve Linn
    Senior Consulting I/T Specialist
    IBM Retired
    ------------------------------



  • 11.  RE: map policy

    Posted 6 days ago

    Hi Steve,

    I have actually tried the following 3 ways of mapping the accountId:

    • Create child named "value" underneed accountId. -> this created the element value with the accountId from the array as per example.
      • accountId format="Local" domiciliation="Local">
        	<value>123456789</value>
        </accountId>
    • map dirrectly to accountId using $item -> no result 
      • <accountId format="Local" domiciliation="Local"></accountId>
    • make AccountId string instead of Object
      • <accountId format="Local" domiciliation="Local">123456789</accountId>

    The solution you proposed just doesn't seem to map anything, which also seems to be the problem Ahmed is having.

    Regards.



    ------------------------------
    Francis Cocx
    Integration Engineer
    Rijkevorsel
    ------------------------------



  • 12.  RE: map policy

    Posted 5 days ago

    Hi Francis,
    Then you're correct and I stand corrected :-) Six months retired and my memory must be fading.  The recursion in building the XML output must also be looking for scalars with properties, but the scalar type is required to map the actual value.

    In Ahmed's post I'm not seeing in his create the input coming from the accountIdSet and I'm also seeing multiple create actions for the same output which isn't correct either.

    Best Regards,
    Steve Linn



    ------------------------------
    Steve Linn
    Senior Consulting I/T Specialist
    IBM Retired
    ------------------------------



  • 13.  RE: map policy

    Posted 9 days ago

    i apologize and much thanks for your enormous support , really appreciated but i would like to highlight that my array structure is accountIdSet "array" of accountId as "objects" 

     "accountIdSet": [
                                    {
                                        "accountId": {
                                            "format""XX",
                                            "domiciliation""X",
                                            "accountId""XX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XX",
                                            "domiciliation""XX",
                                            "accountId"XXX
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XXX",
                                            "accountId""XXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XX",
                                            "accountId""XXXX"
                                        }
                                    }
                                ],


    ------------------------------
    Ahmed Elaimy
    ------------------------------



  • 14.  RE: map policy

    Posted 9 days ago
      dear steve ,this is the full assemply , knowing that the atrributes "format & domnicilation " are read from the same path as the accountId value , 
    appreciate your kind support the solution you offered is not working unfortunately ,
    assembly:
        execute:
          - parse:
              version2.2.0
              titleparse
              parse-settings-reference:
                defaultapic-default-parsesettings
          - map:
              inputs:
                input:
                  schema:
                    $ref'#/definitions/getAccountListInput'
                  variablerequest.body
                  contentapplication/xml
              outputs:
                output:
                  schema:
                    $ref'#/definitions/getAccountListReq'
                  variablemessage.body
                  contentapplication/json
              actions:
                - setoutput.getAccountList.header.ebmCID
                  frominput.Envelope.Body.getAccountList.header.ebmCID
                - setoutput.getAccountList.header.ebmMID
                  frominput.Envelope.Body.getAccountList.header.ebmMID
                - setoutput.getAccountList.header.ebmRTID
                  frominput.Envelope.Body.getAccountList.header.ebmRTID
                - setoutput.getAccountList.header.ebmPID
                  frominput.Envelope.Body.getAccountList.header.ebmPID
                - setoutput.getAccountList.header.ebmSID
                  frominput.Envelope.Body.getAccountList.header.ebmSID
                - setoutput.getAccountList.header.ebmTimestamp
                  frominput.Envelope.Body.getAccountList.header.ebmTimestamp
                - setoutput.getAccountList.header.bankEntityId
                  frominput.Envelope.Body.getAccountList.header.bankEntityId
                - setoutput.getAccountList.header.userID
                  frominput.Envelope.Body.getAccountList.header.userID
                - setoutput.getAccountList.body.customerId
                  frominput.Envelope.Body.getAccountList.body.customerId
              version2.1.0
              titlemap
              options:
                mapEmulateV4EmptyJSONObjectfalse
                mapEmulateV4DefaultRequiredPropsfalse
                mapEnablePostProcessingJSONfalse
                mapReferenceLimit1
          - invoke:
              version2.0.0
              titleinvoke
              backend-typedetect
              header-control:
                typeblocklist
                values[]
              parameter-control:
                typeblocklist
                values[]
              timeout60
              verbkeep
              chunked-uploadstrue
              persistent-connectiontrue
              target-url: >-
              outputvarResp
          - map:
              inputs:
                input:
                  schema:
                    $ref'#/definitions/getAccountListResp'
                  variablevarResp.body
                  contentapplication/json
              outputs:
                output:
                  schema:
                    $ref'#/definitions/getAccountListOutput'
                  variablemessage.body
                  contentapplication/xml
              actions:
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmCID
                  frominput.getAccountListResponse.header.ebmCID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmMID
                  frominput.getAccountListResponse.header.ebmMID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmRTID
                  frominput.getAccountListResponse.header.ebmRTID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmPID
                  frominput.getAccountListResponse.header.ebmPID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmSID
                  frominput.getAccountListResponse.header.ebmSID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmTimestamp
                  frominput.getAccountListResponse.header.ebmTimestamp
                - setoutput.Envelope.Body.getAccountListResponse.header.bankEntityId
                  frominput.getAccountListResponse.header.bankEntityId
                - setoutput.Envelope.Body.getAccountListResponse.header.userID
                  frominput.getAccountListResponse.header.userID
                - setoutput.Envelope.Body.getAccountListResponse.header.propertySet
                  frominput.getAccountListResponse.header.propertySet
                - set: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                  actions:
                    - set'@name'
                      fromname
                    - set'@description'
                      fromdescription
                    - set'@type'
                      fromtype
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet
                  frominput.getAccountListResponse.header.propertySet
                  actions:
                    - createvalue
                      foreachproperty
                      fromproperty
                      actions:
                        - set$item
                          fromvalue
                - create: >-
                    output.Envelope.Body.getAccountListResponse.body.accountSummaryList.accountSummary
                  foreach: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  from: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  actions:
                    - set'@showBalances'
                      fromshowBalances
                    - set'@balanceSheet'
                      frombalanceSheet
                    - createaccountIdSet.accountId
                      foreachaccountIdSet
                      fromaccountIdSet
                      valueaccountId.accountId
                      actions:
                        - set'@format'
                          fromaccountId.format
                        - set'@domiciliation'
                          fromaccountId.domiciliation
                    - setcustomerSummaryList.customerSummary.customerId
                      fromcustomerSummaryList.customerSummary.customerId
                    - setcustomerSummaryList.customerSummary.name
                      fromcustomerSummaryList.customerSummary.name
                    - setbranchSummary.branchId
                      frombranchSummary.branchId
                    - setbranchSummary.branchName
                      frombranchSummary.branchName
                    - setcurrency
                      fromcurrency
                    - setaccountType
                      fromaccountType
                    - setjointAccount
                      fromjointAccount
                    - setstatus
                      fromstatus
                    - setactivityDates
                      fromactivityDates
                    - setbalances.minimumBalance.value.@debitOrCredit
                      frombalances.minimumBalance.value.debitOrCredit
                    - setbalances.minimumBalance.value.amount
                      frombalances.minimumBalance.value.amount
                    - setbalances.minimumBalance.value.currency
                      frombalances.minimumBalance.value.currency
                    - setbalances.minimumBalance.counterValue.@debitOrCredit
                      frombalances.minimumBalance.counterValue.debitOrCredit
                    - setbalances.minimumBalance.counterValue.amount
                      frombalances.minimumBalance.counterValue.amount
                    - setbalances.minimumBalance.counterValue.currency
                      frombalances.minimumBalance.counterValue.currency
                    - setbalances.book.value.@debitOrCredit
                      frombalances.book.value.debitOrCredit
                    - setbalances.book.value.amount
                      frombalances.book.value.amount
                    - setbalances.book.value.currency
                      frombalances.book.value.currency
                    - setbalances.book.counterValue.@debitOrCredit
                      frombalances.book.counterValue.debitOrCredit
                    - setbalances.book.counterValue.amount
                      frombalances.book.counterValue.amount
                    - setbalances.book.counterValue.currency
                      frombalances.book.counterValue.currency
                    - setbalances.available.value.@debitOrCredit
                      frombalances.available.value.debitOrCredit
                    - setbalances.available.value.amount
                      frombalances.available.value.amount
                    - setbalances.available.value.currency
                      frombalances.available.value.currency
                    - setbalances.available.counterValue.@debitOrCredit
                      frombalances.available.counterValue.debitOrCredit
                    - setbalances.available.counterValue.amount
                      frombalances.available.counterValue.amount
                    - setbalances.available.counterValue.currency
                      frombalances.available.counterValue.currency
                    - setbalances.valueDate.value.@debitOrCredit
                      frombalances.valueDate.value.debitOrCredit
                    - setbalances.valueDate.value.amount
                      frombalances.valueDate.value.amount
                    - setbalances.valueDate.value.currency
                      frombalances.valueDate.value.currency
                    - setbalances.valueDate.counterValue.@debitOrCredit
                      frombalances.valueDate.counterValue.debitOrCredit
                    - setbalances.valueDate.counterValue.amount
                      frombalances.valueDate.counterValue.amount
                    - setbalances.valueDate.counterValue.currency
                      frombalances.valueDate.counterValue.currency
                    - setbalances.unclearedFunds.value.@debitOrCredit
                      frombalances.unclearedFunds.value.debitOrCredit
                    - setbalances.unclearedFunds.value.amount
                      frombalances.unclearedFunds.value.amount
                    - setbalances.unclearedFunds.value.currency
                      frombalances.unclearedFunds.value.currency
                    - setbalances.unclearedFunds.counterValue.@debitOrCredit
                      frombalances.unclearedFunds.counterValue.debitOrCredit
                    - setbalances.unclearedFunds.counterValue.amount
                      frombalances.unclearedFunds.counterValue.amount
                    - setbalances.unclearedFunds.counterValue.currency
                      frombalances.unclearedFunds.counterValue.currency
                    - setbalances.netBalance.value.@debitOrCredit
                      frombalances.netBalance.value.debitOrCredit
                    - setbalances.netBalance.value.amount
                      frombalances.netBalance.value.amount
                    - setbalances.netBalance.value.currency
                      frombalances.netBalance.value.currency
                    - setbalances.netBalance.counterValue.@debitOrCredit
                      frombalances.netBalance.counterValue.debitOrCredit
                    - setbalances.netBalance.counterValue.amount
                      frombalances.netBalance.counterValue.amount
                    - setbalances.netBalance.counterValue.currency
                      frombalances.netBalance.counterValue.currency
                    - setbalances.holdAmount.value.@debitOrCredit
                      frombalances.holdAmount.value.debitOrCredit
                    - setbalances.holdAmount.value.amount
                      frombalances.holdAmount.value.amount
                    - setbalances.holdAmount.value.currency
                      frombalances.holdAmount.value.currency
                    - setbalances.holdAmount.counterValue.@debitOrCredit
                      frombalances.holdAmount.counterValue.debitOrCredit
                    - setbalances.holdAmount.counterValue.amount
                      frombalances.holdAmount.counterValue.amount
                    - setbalances.holdAmount.counterValue.currency
                      frombalances.holdAmount.counterValue.currency
                    - setbalances.outstandingAmount.value.@debitOrCredit
                      frombalances.outstandingAmount.value.debitOrCredit
                    - setbalances.outstandingAmount.value.amount
                      frombalances.outstandingAmount.value.amount
                    - setbalances.outstandingAmount.value.currency
                      frombalances.outstandingAmount.value.currency
                    - setbalances.outstandingAmount.counterValue.@debitOrCredit
                      frombalances.outstandingAmount.counterValue.debitOrCredit
                    - setbalances.outstandingAmount.counterValue.amount
                      frombalances.outstandingAmount.counterValue.amount
                    - setbalances.outstandingAmount.counterValue.currency
                      frombalances.outstandingAmount.counterValue.currency
                    - setbalances.unutilizedAmount.value.@debitOrCredit
                      frombalances.unutilizedAmount.value.debitOrCredit
                    - setbalances.unutilizedAmount.value.amount
                      frombalances.unutilizedAmount.value.amount
                    - setbalances.unutilizedAmount.value.currency
                      frombalances.unutilizedAmount.value.currency
                    - setbalances.unutilizedAmount.counterValue.@debitOrCredit
                      frombalances.unutilizedAmount.counterValue.debitOrCredit
                    - setbalances.unutilizedAmount.counterValue.amount
                      frombalances.unutilizedAmount.counterValue.amount
                    - setbalances.unutilizedAmount.counterValue.currency
                      frombalances.unutilizedAmount.counterValue.currency
                    - setbalances.totalAvailable.value.@debitOrCredit
                      frombalances.totalAvailable.value.debitOrCredit
                    - setbalances.totalAvailable.value.amount
                      frombalances.totalAvailable.value.amount
                    - setbalances.totalAvailable.value.currency
                      frombalances.totalAvailable.value.currency
                    - setbalances.totalAvailable.counterValue.@debitOrCredit
                      frombalances.totalAvailable.counterValue.debitOrCredit
                    - setbalances.totalAvailable.counterValue.amount
                      frombalances.totalAvailable.counterValue.amount
                    - setbalances.totalAvailable.counterValue.currency
                      frombalances.totalAvailable.counterValue.currency
                    - setbalances.blockedAmount.value.@debitOrCredit
                      frombalances.blockedAmount.value.debitOrCredit
                    - setbalances.blockedAmount.value.amount
                      frombalances.blockedAmount.value.amount
                    - setbalances.blockedAmount.value.currency
                      frombalances.blockedAmount.value.currency
                    - setbalances.blockedAmount.counterValue.@debitOrCredit
                      frombalances.blockedAmount.counterValue.debitOrCredit
                    - setbalances.blockedAmount.counterValue.amount
                      frombalances.blockedAmount.counterValue.amount
                    - setbalances.blockedAmount.counterValue.currency
                      frombalances.blockedAmount.counterValue.currency
                    - createpropertySet.property
                      foreachpropertySet
                      frompropertySet
                      actions:
                        - set'@name'
                          fromproperty.name
                        - setvalue
                          fromproperty.value
                    - createassociatedProductSet.associatedProduct
                      foreachassociatedProductSet.associatedProduct
                      fromassociatedProductSet.associatedProduct
                      actions:
                        - settype
                          fromtype
                        - setisAvailable
                          fromisAvailable
                        - setlimitSet.limit.type
                          fromlimitSet.limit.type
                        - setlimitSet.limit.limitAmount
                          fromlimitSet.limit.limitAmount
              version2.1.0
              titlemap
              options:
                mapEmulateV4EmptyJSONObjectfalse
                mapEmulateV4DefaultRequiredPropsfalse
                mapEnablePostProcessingJSONfalse
                mapReferenceLimit1
                mapNullValuetrue
                includeEmptyXMLElementsnull
                falsecatchnull

    and this is the input :
                                "accountIdSet": [
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "domiciliation": "XXX",
                                            "accountId": "XXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "domiciliation": "XXX",
                                            "accountId": "XXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "accountId": "XXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "accountId": "XXX"
                                        }
                                    }
                                ]


    ------------------------------
    Ahmed Elaimy
    ------------------------------



  • 15.  RE: map policy

    Posted 9 days ago
     dear this is the full assemply , knowing that the atrributes "format & domnicilation " are read from the same path as the accountId value , 
    appreciate your kind support the solution you offered is not working unfortunately , also the input data 
    this is the input 
                                "accountIdSet": [
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "domiciliation": "XX",
                                            "accountId": "004976670001"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXXX",
                                            "domiciliation": "XXXX",
                                            "accountId": "XXXXXXXXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "accountId": "XDXXXXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format": "XXX",
                                            "accountId": "XXXXX"
                                        }
                                    }
                                ],
    assembly:
        execute:
          - parse:
              version2.2.0
              titleparse
              parse-settings-reference:
                defaultapic-default-parsesettings
          - map:
              inputs:
                input:
                  schema:
                    $ref'#/definitions/getAccountListInput'
                  variablerequest.body
                  contentapplication/xml
              outputs:
                output:
                  schema:
                    $ref'#/definitions/getAccountListReq'
                  variablemessage.body
                  contentapplication/json
              actions:
                - setoutput.getAccountList.header.ebmCID
                  frominput.Envelope.Body.getAccountList.header.ebmCID
                - setoutput.getAccountList.header.ebmMID
                  frominput.Envelope.Body.getAccountList.header.ebmMID
                - setoutput.getAccountList.header.ebmRTID
                  frominput.Envelope.Body.getAccountList.header.ebmRTID
                - setoutput.getAccountList.header.ebmPID
                  frominput.Envelope.Body.getAccountList.header.ebmPID
                - setoutput.getAccountList.header.ebmSID
                  frominput.Envelope.Body.getAccountList.header.ebmSID
                - setoutput.getAccountList.header.ebmTimestamp
                  frominput.Envelope.Body.getAccountList.header.ebmTimestamp
                - setoutput.getAccountList.header.bankEntityId
                  frominput.Envelope.Body.getAccountList.header.bankEntityId
                - setoutput.getAccountList.header.userID
                  frominput.Envelope.Body.getAccountList.header.userID
                - setoutput.getAccountList.body.customerId
                  frominput.Envelope.Body.getAccountList.body.customerId
              version2.1.0
              titlemap
              options:
                mapEmulateV4EmptyJSONObjectfalse
                mapEmulateV4DefaultRequiredPropsfalse
                mapEnablePostProcessingJSONfalse
                mapReferenceLimit1
          - invoke:
              version2.0.0
              titleinvoke
              backend-typedetect
              header-control:
                typeblocklist
                values[]
              parameter-control:
                typeblocklist
                values[]
              timeout60
              verbkeep
              chunked-uploadstrue
              persistent-connectiontrue
              target-url: >-
              outputvarResp
          - map:
              inputs:
                input:
                  schema:
                    $ref'#/definitions/getAccountListResp'
                  variablevarResp.body
                  contentapplication/json
              outputs:
                output:
                  schema:
                    $ref'#/definitions/getAccountListOutput'
                  variablemessage.body
                  contentapplication/xml
              actions:
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmCID
                  frominput.getAccountListResponse.header.ebmCID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmMID
                  frominput.getAccountListResponse.header.ebmMID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmRTID
                  frominput.getAccountListResponse.header.ebmRTID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmPID
                  frominput.getAccountListResponse.header.ebmPID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmSID
                  frominput.getAccountListResponse.header.ebmSID
                - setoutput.Envelope.Body.getAccountListResponse.header.ebmTimestamp
                  frominput.getAccountListResponse.header.ebmTimestamp
                - setoutput.Envelope.Body.getAccountListResponse.header.bankEntityId
                  frominput.getAccountListResponse.header.bankEntityId
                - setoutput.Envelope.Body.getAccountListResponse.header.userID
                  frominput.getAccountListResponse.header.userID
                - setoutput.Envelope.Body.getAccountListResponse.header.propertySet
                  frominput.getAccountListResponse.header.propertySet
                - set: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                  actions:
                    - set'@name'
                      fromname
                    - set'@description'
                      fromdescription
                    - set'@type'
                      fromtype
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet
                  frominput.getAccountListResponse.header.propertySet
                  actions:
                    - createvalue
                      foreachproperty
                      fromproperty
                      actions:
                        - set$item
                          fromvalue
                - create: >-
                    output.Envelope.Body.getAccountListResponse.body.accountSummaryList.accountSummary
                  foreach: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  from: >-
                    input.getAccountListResponse.body.accountSummaryList.accountSummary
                  actions:
                    - set'@showBalances'
                      fromshowBalances
                    - set'@balanceSheet'
                      frombalanceSheet
                    - createaccountIdSet.accountId
                      foreachaccountIdSet
                      fromaccountIdSet
                      valueaccountId.accountId
                      actions:
                        - set'@format'
                          fromaccountId.format
                        - set'@domiciliation'
                          fromaccountId.domiciliation
                    - setcustomerSummaryList.customerSummary.customerId
                      fromcustomerSummaryList.customerSummary.customerId
                    - setcustomerSummaryList.customerSummary.name
                      fromcustomerSummaryList.customerSummary.name
                    - setbranchSummary.branchId
                      frombranchSummary.branchId
                    - setbranchSummary.branchName
                      frombranchSummary.branchName
                    - setcurrency
                      fromcurrency
                    - setaccountType
                      fromaccountType
                    - setjointAccount
                      fromjointAccount
                    - setstatus
                      fromstatus
                    - setactivityDates
                      fromactivityDates
                    - setbalances.minimumBalance.value.@debitOrCredit
                      frombalances.minimumBalance.value.debitOrCredit
                    - setbalances.minimumBalance.value.amount
                      frombalances.minimumBalance.value.amount
                    - setbalances.minimumBalance.value.currency
                      frombalances.minimumBalance.value.currency
                    - setbalances.minimumBalance.counterValue.@debitOrCredit
                      frombalances.minimumBalance.counterValue.debitOrCredit
                    - setbalances.minimumBalance.counterValue.amount
                      frombalances.minimumBalance.counterValue.amount
                    - setbalances.minimumBalance.counterValue.currency
                      frombalances.minimumBalance.counterValue.currency
                    - setbalances.book.value.@debitOrCredit
                      frombalances.book.value.debitOrCredit
                    - setbalances.book.value.amount
                      frombalances.book.value.amount
                    - setbalances.book.value.currency
                      frombalances.book.value.currency
                    - setbalances.book.counterValue.@debitOrCredit
                      frombalances.book.counterValue.debitOrCredit
                    - setbalances.book.counterValue.amount
                      frombalances.book.counterValue.amount
                    - setbalances.book.counterValue.currency
                      frombalances.book.counterValue.currency
                    - setbalances.available.value.@debitOrCredit
                      frombalances.available.value.debitOrCredit
                    - setbalances.available.value.amount
                      frombalances.available.value.amount
                    - setbalances.available.value.currency
                      frombalances.available.value.currency
                    - setbalances.available.counterValue.@debitOrCredit
                      frombalances.available.counterValue.debitOrCredit
                    - setbalances.available.counterValue.amount
                      frombalances.available.counterValue.amount
                    - setbalances.available.counterValue.currency
                      frombalances.available.counterValue.currency
                    - setbalances.valueDate.value.@debitOrCredit
                      frombalances.valueDate.value.debitOrCredit
                    - setbalances.valueDate.value.amount
                      frombalances.valueDate.value.amount
                    - setbalances.valueDate.value.currency
                      frombalances.valueDate.value.currency
                    - setbalances.valueDate.counterValue.@debitOrCredit
                      frombalances.valueDate.counterValue.debitOrCredit
                    - setbalances.valueDate.counterValue.amount
                      frombalances.valueDate.counterValue.amount
                    - setbalances.valueDate.counterValue.currency
                      frombalances.valueDate.counterValue.currency
                    - setbalances.unclearedFunds.value.@debitOrCredit
                      frombalances.unclearedFunds.value.debitOrCredit
                    - setbalances.unclearedFunds.value.amount
                      frombalances.unclearedFunds.value.amount
                    - setbalances.unclearedFunds.value.currency
                      frombalances.unclearedFunds.value.currency
                    - setbalances.unclearedFunds.counterValue.@debitOrCredit
                      frombalances.unclearedFunds.counterValue.debitOrCredit
                    - setbalances.unclearedFunds.counterValue.amount
                      frombalances.unclearedFunds.counterValue.amount
                    - setbalances.unclearedFunds.counterValue.currency
                      frombalances.unclearedFunds.counterValue.currency
                    - setbalances.netBalance.value.@debitOrCredit
                      frombalances.netBalance.value.debitOrCredit
                    - setbalances.netBalance.value.amount
                      frombalances.netBalance.value.amount
                    - setbalances.netBalance.value.currency
                      frombalances.netBalance.value.currency
                    - setbalances.netBalance.counterValue.@debitOrCredit
                      frombalances.netBalance.counterValue.debitOrCredit
                    - setbalances.netBalance.counterValue.amount
                      frombalances.netBalance.counterValue.amount
                    - setbalances.netBalance.counterValue.currency
                      frombalances.netBalance.counterValue.currency
                    - setbalances.holdAmount.value.@debitOrCredit
                      frombalances.holdAmount.value.debitOrCredit
                    - setbalances.holdAmount.value.amount
                      frombalances.holdAmount.value.amount
                    - setbalances.holdAmount.value.currency
                      frombalances.holdAmount.value.currency
                    - setbalances.holdAmount.counterValue.@debitOrCredit
                      frombalances.holdAmount.counterValue.debitOrCredit
                    - setbalances.holdAmount.counterValue.amount
                      frombalances.holdAmount.counterValue.amount
                    - setbalances.holdAmount.counterValue.currency
                      frombalances.holdAmount.counterValue.currency
                    - setbalances.outstandingAmount.value.@debitOrCredit
                      frombalances.outstandingAmount.value.debitOrCredit
                    - setbalances.outstandingAmount.value.amount
                      frombalances.outstandingAmount.value.amount
                    - setbalances.outstandingAmount.value.currency
                      frombalances.outstandingAmount.value.currency
                    - setbalances.outstandingAmount.counterValue.@debitOrCredit
                      frombalances.outstandingAmount.counterValue.debitOrCredit
                    - setbalances.outstandingAmount.counterValue.amount
                      frombalances.outstandingAmount.counterValue.amount
                    - setbalances.outstandingAmount.counterValue.currency
                      frombalances.outstandingAmount.counterValue.currency
                    - setbalances.unutilizedAmount.value.@debitOrCredit
                      frombalances.unutilizedAmount.value.debitOrCredit
                    - setbalances.unutilizedAmount.value.amount
                      frombalances.unutilizedAmount.value.amount
                    - setbalances.unutilizedAmount.value.currency
                      frombalances.unutilizedAmount.value.currency
                    - setbalances.unutilizedAmount.counterValue.@debitOrCredit
                      frombalances.unutilizedAmount.counterValue.debitOrCredit
                    - setbalances.unutilizedAmount.counterValue.amount
                      frombalances.unutilizedAmount.counterValue.amount
                    - setbalances.unutilizedAmount.counterValue.currency
                      frombalances.unutilizedAmount.counterValue.currency
                    - setbalances.totalAvailable.value.@debitOrCredit
                      frombalances.totalAvailable.value.debitOrCredit
                    - setbalances.totalAvailable.value.amount
                      frombalances.totalAvailable.value.amount
                    - setbalances.totalAvailable.value.currency
                      frombalances.totalAvailable.value.currency
                    - setbalances.totalAvailable.counterValue.@debitOrCredit
                      frombalances.totalAvailable.counterValue.debitOrCredit
                    - setbalances.totalAvailable.counterValue.amount
                      frombalances.totalAvailable.counterValue.amount
                    - setbalances.totalAvailable.counterValue.currency
                      frombalances.totalAvailable.counterValue.currency
                    - setbalances.blockedAmount.value.@debitOrCredit
                      frombalances.blockedAmount.value.debitOrCredit
                    - setbalances.blockedAmount.value.amount
                      frombalances.blockedAmount.value.amount
                    - setbalances.blockedAmount.value.currency
                      frombalances.blockedAmount.value.currency
                    - setbalances.blockedAmount.counterValue.@debitOrCredit
                      frombalances.blockedAmount.counterValue.debitOrCredit
                    - setbalances.blockedAmount.counterValue.amount
                      frombalances.blockedAmount.counterValue.amount
                    - setbalances.blockedAmount.counterValue.currency
                      frombalances.blockedAmount.counterValue.currency
                    - createpropertySet.property
                      foreachpropertySet
                      frompropertySet
                      actions:
                        - set'@name'
                          fromproperty.name
                        - setvalue
                          fromproperty.value
                    - createassociatedProductSet.associatedProduct
                      foreachassociatedProductSet.associatedProduct
                      fromassociatedProductSet.associatedProduct
                      actions:
                        - settype
                          fromtype
                        - setisAvailable
                          fromisAvailable
                        - setlimitSet.limit.type
                          fromlimitSet.limit.type
                        - setlimitSet.limit.limitAmount
                          fromlimitSet.limit.limitAmount
              version2.1.0
              titlemap
              options:
                mapEmulateV4EmptyJSONObjectfalse
                mapEmulateV4DefaultRequiredPropsfalse
                mapEnablePostProcessingJSONfalse
                mapReferenceLimit1
                mapNullValuetrue
                includeEmptyXMLElementsnull
                falsecatchnull


    ------------------------------
    Ahmed Elaimy
    ------------------------------



  • 16.  RE: map policy

    Posted 5 days ago

    Hi Ahmed,

    The entire assembly is a lot of "noise" for just the mapping at issue,  Here's your relevant map create actions currently

                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                  actions:
                    - set'@name'
                      fromname
                    - set'@description'
                      fromdescription
                    - set'@type'
                      fromtype
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet
                  frominput.getAccountListResponse.header.propertySet
                  actions:
                    - createvalue
                      foreachproperty
                      fromproperty
                      actions:
                        - set$item
                          fromvalue
    For your input data array 

                                "accountIdSet": [
                                    {
                                        "accountId": {
                                            "format""XXX",
                                            "domiciliation""XX",
                                            "accountId""004976670001"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XXXX",
                                            "domiciliation""XXXX",
                                            "accountId""XXXXXXXXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XXX",
                                            "accountId""XDXXXXX"
                                        }
                                    },
                                    {
                                        "accountId": {
                                            "format""XXX",
                                            "accountId""XXXXX"
                                        } 
                                    }
                                ],

    First notice you have two create actions to the same output property Envelope.Body.getAccountListResponse.header.propertySet.property.  The create action is what is used to iterate over input arrays and create output arrays.  When you have two separate create actions they will add to your output array, thus the 1st will create 0..n array entries, and the second will add another 0..n entries depending upon the inputs that you are doing the foreach over in each create action.  What you have above in the 2nd create is where you are using the $item mapping but that should be another child mapping of the first create, and the 2nd create is extraneous.
                - create: >-
                    output.Envelope.Body.getAccountListResponse.header.propertySet.property
                  foreachinput.getAccountListResponse.header.propertySet.property
                  frominput.getAccountListResponse.header.propertySet.property
                  actions:
                    - set'@name'
                      fromname
                    - set'@description'
                      fromdescription
                    - set'@type'
                      fromtype
                    - set$item
                      fromvalue

    Your second create has a child create action too, which would be for a two dimensional array which I don't believe is your requirement.

    Next, given your input data, I do not see any from property looking for your input array, specifically accountIdSet which should be the from of a parent create action, where the child action would have a from of accountId.format, accountId.domiciliation, and accountId.accountId (which would have a set for $item).

    Not much more I can add given I can't test anything.  I would suggest you simplify your map actions to a single create that iterate over accountIdSet and create the XML output desired, then all of the simple set actions can be added back in.  Just keep a copy of your current actions and you can past the sets back in when you get the array mapping correct.

    Best Regards,
    Steve Linn


    ------------------------------
    Steve Linn
    Senior Consulting I/T Specialist
    IBM Retired
    ------------------------------