Mar*_*bel 3 java xml spring xpath apache-camel
我像这样流动,我的问题是我在第二个标题上得到了错误的值:
<when>
<xpath>//kred:assigment_GetRq/nrb</xpath>
<setHeader headerName="nrbPE">
<xpath resultType="java.lang.String">//kred:assigment_GetRq/nrb/text()</xpath>
</setHeader>
<setHeader headerName="subNrbPE">
<xpath resultType="java.lang.String">substring(${headers.nrbPE}, 3, 6)</xpath>
</setHeader>
<setHeader headerName="kod">
<simple>${properties:apiEsb.assigment.bpCode}</simple>
</setHeader>
<log loggingLevel="INFO" message="header nrb: ${headers.nrbPE}"/>
<log loggingLevel="INFO" message="header subNrb: ${headers.subNrbPE}"/>
<log loggingLevel="INFO" message="Property: ${headers.kod}"/>
<choice>
<when>
<xpath>${headers.subNrbPE} = ${headers.kod}</xpath>
<process ref="createDetailSectionProc" />
</when>
<otherwise>
<log loggingLevel="INFO" message="otherwise"/>
</otherwise>
</choice>
</when>
Run Code Online (Sandbox Code Playgroud)
日志:
08:26:47,067 | INFO | Esb| Assigment_Get | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | header nrb: 99999999
08:26:47,067 | INFO | Esb| Assigfment_Get | | 68 - org.apache.camel.camel-core - 2.6.0.fuse-03-01 | header subNrb: ass ja
Run Code Online (Sandbox Code Playgroud)
我不明白语法有什么问题,因为第二个值应该是9999,但我看到子字符串在(类java ...)上出现了。您能告诉我我在哪里弄错了吗?我需要在Camel中的某些逻辑语句中将此子字符串值与属性值进行比较。
小智 5
您应该使用以下语法:
<setHeader headerName="subNrbPE">
<xpath resultType="java.lang.String">substring($in:nrbPE, 3, 4)</xpath>
</setHeader>
Run Code Online (Sandbox Code Playgroud)
因为XPath 子字符串需要
fn:substring(sourceString,startingLoc,length)
因此,如果要使用4位数字,则需要指定起始位置(3)和所需的字符数(4)。
比较也应更改为:
<simple>${headers.subNrbPE} == ${headers.kod}</simple>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |