我目前正在使用 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 对于所需的结构是什么。