加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于处理大型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
http://static.springsource.org/spring-ws/site/reference/html/oxm.html(8.5.2)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读