用于处理大型XML的Java OO设计
发布时间:2020-12-16 07:50:34 所属栏目:百科 来源:网络整理
导读:我们正在设计一个处理 XML消息的系统. 处理Java类需要从较大的XML中分离出各种属性和值,并将这些作为参数传递给各个处理程序类以进行各种操作. 我们考虑过以下选项: 一个) 将整个XML传递给每个处理程序并让它提取相关的位 – 但是觉得每次传递XML可能效率低
我们正在设计一个处理
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解析.
http://jaxb.java.net/ 如果你使用Spring很容易为org.springframework.oxm.jaxb.Jaxb2Marshaller设置一个bean (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |