我目前正在使用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对于所需的结构是什么。
答案 0 :(得分:1)
对于问题的第二部分,如果您希望将名称字段作为属性,则该字段的正确注释应如下所示。
@XStreamAsAttribute
private String name;
在XStream annotation documents之后,第一部分应该是:
@XStreamImplicit(itemFieldName="PROP")
private List<Prop> prop;