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>

発生する必要がある 2 つのことは、1)<prop>レコードの直下にすべての<PROP>エンティティがあるため、エンティティを削除する必要があることです。2) する<PROP>必要がある<PROP NAME...>

注釈をいじってみましたが、出力を変更できないようです。目的の構造の XSD がどうなるかさえわかりません。

4

1 に答える 1

1

質問の 2 番目の部分では、名前フィールドを属性にしたい場合、名前フィールドの正しい注釈は次のようになります。

@XStreamAsAttribute
private String name;

XStream 注釈ドキュメントに続いて、最初の部分は次のようになります。

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