Castor:如何映射Java层次结构



我在映射层次结构时遇到了这个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

映射文件中的类之间没有关系。

用你提供的信息,我把一个映射工作。它假定您的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>

我发现这个问题的唯一解决方案是将所有映射包含在单个文件中,就像您所做的那样。这很不方便,但我认为这是最好的选择。我在网上其他地方读到,这是Castor可能遇到的问题,具体取决于正在使用的是哪个类装入器。它将在类装入器的bin文件夹中查找包含的映射,这显然不是正确的位置。(在我的例子中是websphere)

可能可以放置一个绝对路径,即

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

但是我还没有能够验证这是否有效,并且最终将不是非常可移植或方便的解决方案,因为它是特定于部署环境的

相关内容

  • 没有找到相关文章