如何在调用端点之前有条件地将标签插入 soap 请求体?
How to insert tag conditionally into soap request body before calling endpoint?
我想根据某些条件向 soap 请求正文添加标签
应该添加到ActionProperties标签下
所以我尝试使用 enrich mediator 如下:
<filter regex="false" source="get-property('IsValid')">
<then>
<enrich>
<source clone="true" type="inline">
<p857:Property propertyId="isArchived" settable="0" xsi:type="p857:SingletonString"
xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<p857:Value>1</p857:Value>
</p857:Property>
</source>
<target
xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
action="child"
type="custom" xpath="//p857:ExecuteChangesRequest/p857:ChangeRequest/p857:ActionProperties" />
</enrich>
</then>
<else/>
</filter>
<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></hd:Username>
<hd:Password></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="" serializationDuplicate="0"/>
<p857:Action autoUniqueContainmentName="1" classId="" 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></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></p857:Value>
</p857:Property>
<p857:Property propertyId="RetrievalName" settable="0" xsi:type="p857:SingletonString">
<p857:Value></p857:Value>
</p857:Property>
<p857:Property propertyId="Content" settable="0" xsi:type="p857:ContentData">
<p857:Value xsi:type="p857:InlineContent">
<p857:Binary></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>
但我总是收到错误消息:要丰富的目标对象无效
我能够通过在 payloadFactory 标签 之后添加 enrich 标签 来修复:
<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>
我想根据某些条件向 soap 请求正文添加标签
应该添加到ActionProperties标签下
所以我尝试使用 enrich mediator 如下:
<filter regex="false" source="get-property('IsValid')">
<then>
<enrich>
<source clone="true" type="inline">
<p857:Property propertyId="isArchived" settable="0" xsi:type="p857:SingletonString"
xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<p857:Value>1</p857:Value>
</p857:Property>
</source>
<target
xmlns:p857="http://www.filenet.com/ns/fnce/2006/11/ws/schema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
action="child"
type="custom" xpath="//p857:ExecuteChangesRequest/p857:ChangeRequest/p857:ActionProperties" />
</enrich>
</then>
<else/>
</filter>
<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></hd:Username>
<hd:Password></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="" serializationDuplicate="0"/>
<p857:Action autoUniqueContainmentName="1" classId="" 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></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></p857:Value>
</p857:Property>
<p857:Property propertyId="RetrievalName" settable="0" xsi:type="p857:SingletonString">
<p857:Value></p857:Value>
</p857:Property>
<p857:Property propertyId="Content" settable="0" xsi:type="p857:ContentData">
<p857:Value xsi:type="p857:InlineContent">
<p857:Binary></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>
但我总是收到错误消息:要丰富的目标对象无效
我能够通过在 payloadFactory 标签 之后添加 enrich 标签 来修复:
<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>