[英]Castor: How to map a Java hierarchy
映射层次结构时,我遇到了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" />
但是我无法验证它是否有效,并且最终将不是非常可移植或方便的解决方案,因为它特定于部署环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.