我们正在设计一个处理
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个块
<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>
等等
我不认为你在内存使用或性能方面需要任何特殊的设计考虑,所以我会选择涉及最少编码的解决方案,那就是使用JAXB marshaller将你的xml解析为DTO然后去与您的计划B.也许它比StAX更难设置,但它可以避免编写任何XML解析.
如果你使用Spring很容易为org.springframework.oxm.jaxb.Jaxb2Marshaller设置一个bean
http://static.springsource.org/spring-ws/site/reference/html/oxm.html(8.5.2)
原文地址:https://www.jb51.cc/xml/292667.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。