3

我正在维护一些复杂的 Java 代码,并且 Castor (v1.2) 解组非常慢,因为有很多“丢失”的 Java 对象。看,XML 包含的字段比我需要的要多,但 Castor 反复尝试实例化 Java 对象,导致很多 ClassNotFound 错误。

脚轮映射文件:

<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 等效项,我不希望它解组。我尝试org.exolab.castor.xml.strictelements=false在 castor.properties 文件中进行设置,但这并不能阻止它通过类加载路径并引发 ClassNotFound 错误。

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

4

1 回答 1

0

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

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

于 2012-04-04T18:48:26.173 回答