我们正在设计一个处理 XML 消息的系统。
处理 Java 类需要从较大的 XML 中分离出各种属性和值,并将它们作为参数传递给各个处理程序类以进行各种操作。
我们考虑了以下选项:
一个)
将整个 XML 传递给每个处理程序并让它提取相关位 - 但感觉每次都传递 XML 可能效率低下
B)
将 XML 转换为一个 DTO 或一组较小的 DTO,并将每个 DTO 传递给相关的处理程序
C)
将 XML 切割成片段并将它们传递给每个处理程序方法
我们对其中的每一个都不满意,所以有什么建议可以走吗?
示例 XML
<IdAction>supplied</IdAction>
<RegId>true</RegId>
<DeRegId>false</DeRegId>
<SaveMessage>false</SaveMessage>
<ServiceName>abcRequest</ServiceName>
<timeToPerform>3600</timeToPerform>
<timeToReceipt/>
<SendToBES>true</SendToBES>
<BESQueueName>com.abc.gateway.JMSQueue.forAddRequest</BESQueueName>
<BESTransform/>
<BESJMSProperties>
<property>
<propName>stateCode</propName>
<propValue>OK</propValue>
</property>
<property>
<propName>stateResponse</propName>
<propValue>OK</propValue>
</property>
</BESJMSProperties>
这包含由 4 个处理程序处理的 4 个 block
<IdAction>supplied</IdAction>
<RegId>true</RegId>
<DeRegId>false</DeRegId>
另一个做
<timeToPerform>3600</timeToPerform>
<timeToReceipt/>
接下来做
<SendToBES>true</SendToBES>
<BESQueueName>com.abc.gateway.JMSQueue.forAddRequest</BESQueueName>
<BESTransform/>
<BESJMSProperties>
<property>
<propName>stateCode</propName>
<propValue>OK</propValue>
</property>
<property>
<propName>stateResponse</propName>
<propValue>OK</propValue>
</property>
</BESJMSProperties>
等等
最佳答案
B 听起来是我的最佳选择。 A 效率最低,C 可能需要一次通过来解析它并挑选出片段,然后进行第二次通过才能正确处理它们?
使用 SAX 解析出最小的 DTO 集以传输到专用处理程序类。
好问题,顺便说一句。最好提前考虑这些事情,并获得第 2、第 3、第 4 意见:-)
关于用于处理大型 XML 的 Java OO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011558/