Java POJO xml属性注释

时间:2012-09-19 18:53:23

标签: java annotations marshalling spring-batch

我目前正在使用Spring Batch应用程序调用API并将整个JSON响应解析为XML以供另一个应用程序使用。目前我们正在使用一个相当大的扩展查询与API,有时会超出元素。结果所需的输出格式为

<?xml version...?>
<RECORDS>
    <RECORD>
        <PROP NAME="json.path.to.element.name">
            <PVAL>The value for the element</PVAL>
        </PROP>
        <PROP NAME="json.path.to.element2.name">
            <PVAL>The value for the element2</PVAL>
        </PROP>
        ...
    </RECORD>
    <RECORD>
        ...
    </RECORD>
    ...
</RECORDS>

这是使用DOMSource和Transformer创建的。遗憾的是,这并没有利用Spring Batch块处理。我正在更新它以扩展StaxEventItemWriter并传递映射对象的列表。我的映射实体是

@XmlElement
public class Record implements Serializable {

    private List<Prop> prop;
}

@XmlElement
public class Prop implements Serializable {

    @XmlAttribute
    private String name;

    @XmlValue
    private String pVal;
}

我的marshaller的Spring Spring Batch配置是

<bean id="xmlMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="aliases">
        <map>
            <entry key="RECORD" value="com...Record"/>
            <entry key="PROP" value="com...Prop" />
        </map>
    </property>
</bean>

我得到的问题是我的输出格式不起作用。我正在

<?xml version...?>
<RECORDS>
    <RECORD>
        <prop>
            <PROP>
                <name>json.path.to.element1.name"</name>
                <pVal>The value for the element1</pVal>
            </PROP>
                <name>json.path.to.element2.name"</name>
                <pVal>The value for the element2</pVal>
            </PROP>
            ...
        </prop>
    </RECORD>
    <RECORD>
        <prop>
            ...
        </prop>
    </RECORD>
    ...
</RECORDS>

需要发生的两件事情是:1)<prop>实体需要被删除,因为直接在Record下是所有<PROP>实体。 2)<PROP>需要<PROP NAME...>

我试过弄乱注释但似乎无法改变输出。我甚至不确定XSD对于所需的结构是什么。

1 个答案:

答案 0 :(得分:1)

对于问题的第二部分,如果您希望将名称字段作为属性,则该字段的正确注释应如下所示。

@XStreamAsAttribute
private String name;

XStream annotation documents之后,第一部分应该是:

@XStreamImplicit(itemFieldName="PROP")
private List<Prop> prop;