我需要从xml中提取一个值并将其存储在属性中。
这是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry xmlns="http://ws.apache.org/ns/synapse" key="myVersion2">1</localEntry>
我在互联网上找到了类似的东西:
<property name="myProp"
expression="get-property('registry','conf:repository/myVersion2.xml')"
scope="default"
type="OM"/>
<log level="custom">
<property name="myVersion2.localEntry" expression="$ctx:myVersion2//localEntry"/>
</log>
但不起作用..
我有这个错误:
TID: [0] [ESB] [2015-07-03 16:27:43,495] ERROR {org.apache.axis2.transport.base.threads.NativeWorkerPool} - Uncaught exception {org.apache.axis2.transport.base.threads.NativeWorkerPool}
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
我需要的是获取它之间的值并将其放入属性中。
有人可以帮助我吗?
谢谢
C
答案 0 :(得分:1)
请按照以下步骤更改您的配置。
<log level="custom">
<property name="myProp.localEntry" expression="$myProp//localEntry"/>
</log>
请尝试一下,告诉我们是否能解决您的问题。
答案 1 :(得分:1)
上面的示例基本上是从配置注册表中获取数据(如果它已经存在)。但是你问,如何在属性中设置值。我希望XML已经存在于你的消息上下文中......所以只需遍历xpath并在属性中介中设置值,如下所示。
<property name="myProp"
expression="\\some_element\....\localEntry"
scope="default"
type="String"/>
然后你可以轻松地参考这个&#34; myProp&#34;使用get-property()方法从中获取值。
答案 2 :(得分:1)
我解决了这个问题!
它有效!
<property name="getSequence" expression="get-property('registry','conf:repository/myVersion2.xml')" scope="default" type="OM"/>
<log level="custom">
<property name="TestVersion" expression="$ctx:getSequence//localEntry"/>
</log>
这是输出日志:
TID: [0] [ESB] [2015-07-07 18:04:44,251] INFO {org.apache.synapse.mediators.builtin.LogMediator} - TestVersion = 1 {org.apache.synapse.mediators.builtin.LogMediator}
谢谢大家的帮助!
最诚挚的问候 克劳迪奥
答案 3 :(得分:0)
我尝试应用你的建议,这是xml:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="w3.org/2001/12/soap-envelope" soap:encodingStyle="w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="example.org/stock">
<localEntry xmlns="ws.apache.org/ns/synapse" key="myVersion2">1</localEntry>
</soap:Body>
</soap:Envelope>
这就是我在proxyService中所拥有的:
<property name="myProp3"
expression="//localEntry/text()"
scope="default"
type="STRING"/>
<log level="custom" separator=":">
<property name="debug4" expression="get-property('myProp3')"/>
</log>
但未提取值“1”
TID: [0] [ESB] [2015-07-07 16:37:39,829] INFO {org.apache.synapse.mediators.builtin.LogMediator} - debug4 = {org.apache.synapse.mediators.builtin.LogMediator}
我也尝试了这个:
<property name="myProp2" xmlns:soap="w3.org/2001/12/soap-envelope"
expression="$body/localEntry[@key='myVersion2']/text()"
scope="default"
type="STRING"/>
<log level="custom" separator=":">
<property name="debug2" expression="get-property('myProp2')"/>
</log>
但结果是一样的......
错误是什么?