現在、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>
発生する必要がある 2 つのことは、1)<prop>
レコードの直下にすべての<PROP>
エンティティがあるため、エンティティを削除する必要があることです。2) する<PROP>
必要がある<PROP NAME...>
注釈をいじってみましたが、出力を変更できないようです。目的の構造の XSD がどうなるかさえわかりません。