如何让Castor忽略某些XML字段?

时间:2011-10-18 12:24:25

标签: java xml unmarshalling castor

我正在维护一些复杂的Java代码,而Castor(v1.2)解组由于相当多的“缺失”Java对象而非常慢。看,XML包含的字段比我要求的多,但Castor反复尝试实例化Java对象,导致大量的ClassNotFound错误。

Castor Mapping File:

<mapping>
  <class name="com.example.imaging.product.Product">
    <map-to xml="product"/>
    <field name="productId" type="long">
      <bind-xml name="id" node="attribute"/>
    </field>
  </class>

  <class name="com.example.imaging.product.RegionConfiguration">
    <map-to xml="mediaConfiguration"/>
    <field name="name" type="string">
      <bind-xml name="name" node="attribute"/>
    </field>
    <field name="design" type="int">
      <bind-xml name="designId" node="attribute"/>
    </field>
  </class>
</mapping>

XML来源:

<?xml version="1.0"?>
<product id="1234">
  <productImage colorId="1"/>
  <mediaConfiguration name="Front" designId="98765" />
  <color id="1" name="Red" default="true"/>
</product>

我的问题是color字段没有Java等价物,我不希望它被解组。我尝试在castor.properties文件中设置org.exolab.castor.xml.strictelements=false,但这并不妨碍它走掉classload路径并抛出ClassNotFound错误。

如何让Castor跳过不需要的XML元素?

1 个答案:

答案 0 :(得分:0)

听起来你无法覆盖尝试解组每个元素的行为,请参阅the Castor reference。您是否测量过真正的性能影响?在Castor开发出更好的覆盖行为之前,最好忽略这一点。

  

如果映射文件中没有描述该类,Castor将使用Java Reflection API对该类进行检查,以确定是否存在getXxxYyy()/ setXxxYyy(x)形式的任何函数。此访问器将与名为“xxx-yyy”的XML元素/属性相关联。将来,我们将提供一种覆盖此默认行为的方法。