我遇到的情况是我必须解析CDATA部分中的平面数据,该部分涉及复杂的业务逻辑并生成可以发送到另一个服务的XML请求。由于生成XML涉及复杂的业务逻辑,涉及解析平面文件,我不认为我可以使用现有的WSO2调解器,如XSLT等。我觉得班级调解员可以使用。有什么建议吗?
输入:
2 019019
5 A4L01G0
5 $ P200033450
56- A2A08
5- A2A14
5- A2A16
16-A2G01
10& - A2G02
7723- A2J04
5- A2K023
5- A2K03
767312365- A2P01
5- A2R12313107
512313- A2S02
6F01
6F02
36127316F03
6F04
900000000021]
预期产量: 比如说,
<RequestMessage>
<element1>1</element1>
<element>Data</DCTLibraryName>
<dummyy>PosinaManualLibraryCSet1</dummy>
<DCTIDs>
<elelemt10 attrib=" Base" attrib1="eweew" attrib2="GRR_D_PACK" Name="lib"/>
<elelemt11 attrib ="Base" attrib1="10665" attrib2="temp" Name="lib"/>
>
</RequestMessage>
答案 0 :(得分:0)
我建议使用XSLT中介。它具有丰富的功能来读取CDATA部分并从中计算xml .XSLT是位成本,但如果你的负载不高,你可以使用XSLT。如果您使用类中介,则必须实现所有逻辑..
答案 1 :(得分:0)
如果您对Java更满意,可以实现自定义中介。
//some idea - this code never got tested in a real setup
public class MyCustomMediator extends AbstractMediator {
public boolean mediate(MessageContext context) {
//omitted any safety checks / exception handling
SynapseLog synLog = getLog(context);
//adapt to your message
OMElement element = (OMElement) context.getEnvelope().getBody()
.getFirstOMChild();
BufferedReader reader = new BufferedReader(new StringReader(
element.getText()));
// your custom logic in here
//return the result of your custom logic
element.setText(result.toString());
return true;
}
}