0

JDBC ポーラーを RowMapper と共に使用してデータベースから読み取り、ドメイン オブジェクトのコレクションを出力する Spring Integration アプリケーションがあります (結果セットが複数の行を返したと仮定します)。

次に、ドメイン オブジェクトが XML にマーシャリングされます。Castor をマーシャラーとして使用する場合、これは問題なく機能し、XML はドメイン オブジェクトのコレクションを表します。

<array-list>
   <order>
     <orderID>23940210</orderID>
     ...
   </order>
   <order>
   ...
</array-list>

ここで、Castor から JAXB に切り替えたいと考えています。XML での JAXB マーシャラーの定義は次のとおりです。

<oxm:jaxb2-marshaller id="jaxbMarshallerBean">
   <oxm:class-to-be-bound name="com.mycompany.Order" />
</oxm:jaxb2-marshaller>

... JAXB マーシャラーは、Spring Integration チェーンで使用されるトランスフォーマーとして使用されます..

<int:chain input-channel="input" output-channel="output-jms">
    <si-xml:marshalling-transformer id="defaultMarshaller" marshaller="jaxbMarshallerBean" />
</int:chain>

そしてもちろん、ドメイン クラスには注釈が付けられています。

@XmlRootElement(namespace ="Order")  
public class Order{
     ...

   @XmlElement(name="OrderID")    
   public String getOrderId() {
       return orderId;
   }

現在、次の例外がスローされます。

org.springframework.oxm.UncategorizedMappingException: 
Unknown JAXB exception; 
nested exception is javax.xml.bind.JAXBException: 
class java.util.ArrayList nor any of its super class is known to this context.

JAXB は、ドメイン オブジェクトのコレクションを処理しているという事実を好まないようです。これを構成または処理する正しい方法は何ですか?

どうもありがとう

4

1 に答える 1

0

確かに、アンマーシャリング トランスフォーマーを XML から POJO に変換する必要があります。

それを直接処理するように JAXB を構成する方法があるかどうかはわかりませんが、アンマーシャラーの前に XPath スプリッターを追加し、その後にアグリゲーターを追加することができます。

于 2014-05-19T16:52:35.300 に答える