Castor:如何映射Java层次结构

Castor:如何映射Java层次结构,java,mapping,hierarchy,extends,castor,Java,Mapping,Hierarchy,Extends,Castor,我在映射层次结构时遇到了这个Java Castor问题。谢谢你抽出时间 我有一个XML文件: <RESULT> <RESULTCODE>OK</RESULTCODE> <ERRORS /> <COMPANIES> <COMPANY VD="107795641" NAME="COMPANYA" RATING="" CIF="ABCD3435" ID="7671" NUM="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>

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

根据您提供的信息,我制作了一个有效的映射。它假定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文件夹中查找包含的映射,该文件夹显然不是正确的位置。(就我而言)

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

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


但我无法验证这是否有效,最终也不会是非常可移植或方便的解决方案,因为它特定于部署环境。

忘了提到映射单个类的所有字段(GetCompanyRentedWSResult)可以很好地工作。这只是映射层次结构中缺少的东西。谢谢你的回答,布赖恩。好办法。问题是,我希望在两个单独的映射文件中执行此操作,一个用于“RentedWSResult”,另一个用于“GetCompanyRentedWSResult”,在第一个文件中映射父类的字段(“成功”和“错误”),在第二个文件中映射唯一的子字段(“RentedCompanys”)。你认为这可能吗?是的,用标签就可以了。我将对上面的绑定文件进行更改,并在我的第一篇文章中进行了修改,但仍然不起作用。别担心,我会把它映射到同一个文件中。谢谢。
Unable to find FieldDescriptor for 'COMPANIES' in ClassDescriptor of RESULT
<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>
<include href="file:////C://mapping.xml" />