1

我目前正在使用 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;
}

我的编组器的 Spring Batch XML 配置是

<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 对于所需的结构是什么。

4

1 回答 1

1

对于您问题的第二部分,如果您希望它是一个属性,名称字段的正确注释应该如下所示。

@XStreamAsAttribute
private String name;

XStream 注释文档之后,第一部分应该是:

@XStreamImplicit(itemFieldName="PROP")
private List<Prop> prop;
于 2012-09-25T13:35:12.347 回答