Как заставить Castor игнорировать определенные поля XML?

Я поддерживаю некоторый сложный код Java, и демаршалинг Castor (v1.2) выполняется очень медленно из-за довольно большого количества «отсутствующих» объектов Java. Видите ли, XML содержит больше полей, чем мне нужно, но Castor неоднократно пытается создать экземпляры объектов Java, вызывая множество ошибок ClassNotFound.

Файл сопоставления Castor:

<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?


person Richard Hurt    schedule 18.10.2011    source источник
comment
вы используете Spring для выполнения этой задачи?   -  person Ankit Katiyar    schedule 16.04.2016


Ответы (1)


Похоже, вы не можете переопределить поведение попытки демаршалировать каждый элемент, см. справочник Castor. Вы измерили реальное влияние на производительность? Возможно, лучше просто проигнорировать это, пока Castor не разовьет лучшее поведение коррекции.

Если класс не описан в файле сопоставления, Castor будет выполнять инстроспекцию класса с помощью Java Reflection API, чтобы определить, существует ли какая-либо функция формы getXxxYyy () / setXxxYyy (x). Этот метод доступа будет связан с элементом / атрибутом XML с именем «xxx-yyy». В будущем мы предоставим способ переопределить это поведение по умолчанию.

person David W    schedule 04.04.2012
comment
В качестве обходного пути может быть быстрее создать класс Color (возможно, без каких-либо свойств), чтобы он действительно создавал экземпляр простого класса. Опять же, вероятно, имеет смысл жить со снижением производительности по сравнению с поведением по умолчанию, пока Castor не улучшится. - person David W; 04.04.2012