0

階層のマッピング中にこのJava-Castorの問題が発生しました。御時間ありがとうございます。

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

<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;
}

そして、これらのCastorマッピング:

<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>

動作せず、次のエラーが発生します。

Unable to find FieldDescriptor for 'COMPANIES' in ClassDescriptor of RESULT
4

2 に答える 2

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>
于 2011-12-28T18:54:03.027 に答える
0

この問題に対して私が見つけた唯一の解決策は、これまでと同じようにすべてのマッピングを1つのファイルに含めることです。不便ですが、最高だと思います。これは、どのクラスローダーが使用されているかによって、Castorが経験する可能性のある問題であることをオンラインで読んだことがあります。クラスローダーのbinフォルダーに含まれているマッピングを検索しますが、これは明らかに正しい場所ではありません。(私の場合はwebsphere)

あなたは絶対的な道を置くことができるかもしれませんすなわち

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

しかし、これが機能するかどうかを確認することはできませんでした。展開環境に固有であるため、最終的には移植性や便利なソリューションにはなりません。

于 2014-08-27T21:46:29.360 に答える