2011-12-28 21 views
0

階層をマッピングする際にこのJava-Castorの問題があります。御時間ありがとうございます。Castor:Java階層をマップする方法

<RESULT> 
    <RESULTCODE>OK</RESULTCODE> 
    <ERRORS /> 
    <COMPANIES> 
    <COMPANY VD="107795641" NAME="COMPANYA" 
    RATING="" CIF="ABCD3435" ID="7671" NUM="0" /> 
    <COMPANY VD="102167561" NAME="COMPANYB" 
    RATING="" CIF="ABCD1234" ID="6642" NUM="1" /> 
    </COMPANIES> 
</RESULT> 

このJava階層:

public class RentedWSResult 
{ 
    private boolean success; 

    private List<RentedWSResultError> errors; 
} 

public class GetCompaniesRentedWSResult extends RentedWSResult 
{ 
    private List<RentedCompany> rentedCompanies; 
} 

そして、これらのキャスターマッピング:それは働いていません

<mapping> 
    <class name="RentedWSResult"> 
    <map-to xml="RESULT" /> 
    <field name="success" type="string" handler="BooleanStringHandler"> 
     <bind-xml name="RESULTCODE" /> 
    </field> 
    <field name="errors" type="RentedWSResultError" collection="arraylist"> 
     <bind-xml name="ERROR" location="ERRORS" /> 
    </field> 
    </class> 
</mapping> 

<mapping> 
    <include href="RentedWSResultMarshallConfig.xml"/> 
    <class name="GetCompaniesRentedWSResult" > 
    <field name="rentedCompanies" type="RentedCompany" collection="arraylist"> 
     <bind-xml name="COMPANY" location="COMPANIES" /> 
    </field> 
    </class> 
</mapping> 

、このエラーを取得:

私はこのXMLファイルを持っています

Unable to find FieldDescriptor for 'COMPANIES' in ClassDescriptor of RESULT 
+0

1つのクラス(GetCompaniesRentedWSResult)のすべてのフィールドをマッピングするとうまく動作すると言えます。マッピング階層に欠けているものです。 – user309949

答えて

1

マッピングファイル内にクラス間の関係はありません。

私が提供した情報では、動作するマッピングをまとめています。あなたのRentedWSResultは他の要素のコンテナクラスであると仮定します。

<mapping> 
    <include href="GetCompaniesRentedWSResultBinding.xml"/> 

    <class name="RentedWSResult"> 
     <map-to xml="RESULT" /> 
     <field name="success" type="string"> 
      <bind-xml name="RESULTCODE" /> 
     </field> 

     <field name="rentedCompanies" type="GetCompaniesRentedWSResult"> 
      <bind-xml name="COMPANIES" /> 
     </field> 
    </class> 

</mapping> 

<mapping> 
    <class name="GetCompaniesRentedWSResult" > 
     <field name="rentedCompanies" type="RentedCompany" collection="arraylist"> 
      <bind-xml name="COMPANY" /> 
     </field> 
    </class> 

    <class name="RentedCompany" > 
    <field name="vd" type="string"> 
      <bind-xml name="vd" node="attribute" /> 
     </field> 

     <field name="name" type="string"> 
      <bind-xml name="name" node="attribute"/> 
     </field> 

     <field name="rating" type="string"> 
      <bind-xml name="rating" node="attribute"/> 
     </field> 

    </class> 
</mapping> 
+0

あなたの答えをありがとう、ブライアン。ニースのアプローチ。 問題は、「RentedWSResult」と「GetCompaniesRentedWSResult」の2つの別々のマッピングファイルで、親クラスのフィールド(「成功」と「エラー」)の最初のマッピングを行うことです。第2のものでは唯一の子供のフィールド(「賃貸した企業」)である。あなたはそれが可能だと思いますか? – user309949

+0

はい、タグを使用してください。上記のバインディングファイルに変更を加えます – Brian

+0

私の最初の投稿と同様に修正されましたが、依然として動作していないBrianさんに感謝します。心配しないで、私は同じファイルにマップしようとします。どうもありがとう。 – user309949

0

私がこの問題に気付いたのは、すべてのマッピングを1つのファイルに含めたことだけです。それは不便だが、それが得られるほど良いと思う。私は、Castorがどのクラスローダーがプレイされているかに応じて、これが問題となることをオンラインで他の場所からも読んでいます。明らかに正しい場所ではないクラスローダーのbinフォルダーに含まれているマッピングを探します。 (私の場合のWebSphere)

あなた

<include href="file:////C://mapping.xml" /> 

すなわち、絶対パスを入れることができるかもしれないが、私はこれが動作するかどうかを検証することができていないと、最終的には非常に移植ではないでしょうかデプロイメント環境固有の便利なソリューションです。

関連する問題