2022-05-31

How to use enrich with foreach/iterate to modify SOAP request body?

I want to add multiple tags to SOAP request body from JSON input array.

It should be added under the ActionProperties tag, so I tried to use the enrich mediator with foreach as follows :

<payloadFactory media-type="xml">
            <format>
                <soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
                xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                    <soapenv:Header>
                        <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
                            <hd:UsernameToken xmlns:hd="http://schemas.xmlsoap.org/ws/2002/12/secext">
                                <hd:Username>$1</hd:Username>
                                <hd:Password>$2</hd:Password>
                            </hd:UsernameToken>
                        </Security>
                    </soapenv:Header>
                    <soapenv:Body>
                        <p857:ExecuteChangesRequest refresh="1" xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema">
                            <p857:ChangeRequest id="1" updateSequenceNumber="0">
                                <p857:TargetSpecification classId="ObjectStore" objectId="$3" serializationDuplicate="0"/>
                                <p857:Action autoUniqueContainmentName="1" classId="$4" defineSecurityParentage="0" xsi:type="p857:CreateAction"/>
                                <p857:Action autoClassify="0" checkinMinorVersion="0" xsi:type="p857:CheckinAction"/>
                                <p857:ActionProperties>

                                    <p857:Property propertyId="DocumentTitle" settable="0" xsi:type="p857:SingletonString">
                                        <p857:Value>$5</p857:Value>
                                    </p857:Property>
                                    <p857:Property propertyId="ContentElements" settable="0" xsi:type="p857:ListOfObject">
                                        <p857:Value accessAllowed="0" classId="ContentTransfer" dependentAction="Insert" newIndex="0" originalIndex="0" serializationDuplicate="0" updateSequenceNumber="0">
                                            <p857:Property propertyId="ContentType" settable="0" xsi:type="p857:SingletonString">
                                                <p857:Value>$7</p857:Value>
                                            </p857:Property>
                                            <p857:Property propertyId="RetrievalName" settable="0" xsi:type="p857:SingletonString">
                                                <p857:Value>$5</p857:Value>
                                            </p857:Property>
                                            <p857:Property propertyId="Content" settable="0" xsi:type="p857:ContentData">
                                                <p857:Value xsi:type="p857:InlineContent">
                                                    <p857:Binary>$6</p857:Binary>
                                                </p857:Value>
                                            </p857:Property>
                                        </p857:Value>
                                    </p857:Property>
                                </p857:ActionProperties>
                                <p857:RefreshFilter levelDependents="0" maxElements="0" maxRecursion="0">
                                    <p857:ExcludeProperties>DateCreated</p857:ExcludeProperties>
                                    <p857:ExcludeProperties>DateLastModified</p857:ExcludeProperties>
                                </p857:RefreshFilter>
                            </p857:ChangeRequest>
                        </p857:ExecuteChangesRequest>
                    </soapenv:Body>
                </soapenv:Envelope>
            </format>
            <args>
                <arg evaluator="xml" expression="get-property('Username')"/>
                <arg evaluator="xml" expression="get-property('Password')"/>
                <arg evaluator="xml" expression="get-property('ObjectStore')"/>
                <arg evaluator="xml" expression="get-property('DocumentClass')"/>
                <arg evaluator="xml" expression="get-property('FileName')"/>
                <arg evaluator="xml" expression="get-property('FileData')"/>
                <arg evaluator="xml" expression="get-property('ContentType')"/>
            </args>
        </payloadFactory>

<foreach expression="//propertiesList">
        <target>
        <sequence>
               <enrich>
                   <source clone="true" type="inline">                                             
                   <p857:Property propertyId="$1" settable="0" 
                    xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="p857:SingletonString">
                        <p857:Value>$2</p857:Value>
                    </p857:Property>
                   <args>
                        <arg evaluator="xml" expression="//name"/>
                        <arg evaluator="xml" expression="//value"/>
                    </args>
                    </source>
                    <target action="child" xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" 
                     xpath="//p857:ExecuteChangesRequest/p857:ChangeRequest/p857:ActionProperties"/>
                </enrich>                                                                                                                                           
        </sequence>
        </target>
    </foreach>

but nothing gets inserted into the SOAP request. While if I try to enrich a single tag it works fine as follows:

<enrich>
        <source clone="true" type="inline">
            <p857:Property propertyId="isArchived" settable="0" 
            xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="p857:SingletonString">
                <p857:Value>1</p857:Value>
            </p857:Property>
        </source>
        <target action="child" xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" 
        xpath="//p857:ExecuteChangesRequest/p857:ChangeRequest/p857:ActionProperties"/>
    </enrich>

How can I accomplish that?



No comments:

Post a Comment