2016-06-06 4 views
0

Я пытаюсь изменить булевское значение на String при создании XML-файла. Вот мои источники.Castor-XML: полевой обработчик для нескольких классов

public class BooleanHandler extends GeneralizedFieldHandler { 
    public BooleanHandler() { 
     super(); 
    } 

    @Override 
    public Object convertUponGet(Object value) { 
     boolean booleanValue = (boolean)value; 
     if(booleanValue){ 
      return "1"; 
     }else{ 
      return "0"; 
     } 
    } 

    @Override 
    public Object convertUponSet(Object value) { 
     if("1".equals(value)){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 

    @Override 
    public Class<Boolean> getFieldType() { 
     return Boolean.class; 
    } 

    @Override 
    public Object newInstance(Object parent) throws IllegalStateException 
    { 
     //-- Since it's marked as a string...just return null, 
     //-- it's not needed. 
     return null; 
    } 
} 

и

<mapping> 
    <!-- Change boolean to String Value Handler--> 
    <field-handler name="booleanHandler" class="test.BooleanHandler"> 
    </field-handler> 


    <class name="test.Foo"> 
     <field name="testFlag" type="boolean" handler="booleanHandler"> 
      <bind-xml name="TEST_FLAG" node="element" /> 
     </field> 
    </class> 

    <class name="test.Bar"> 
     <field name="testBoolean" type="boolean" handler="booleanHandler"> 
      <bind-xml name="TEST_BOOLEAN" node="element" /> 
     </field> 
    </class> 
</mapping> 

я получил исключение следующим образом:

java.lang.IllegalArgumentException: объект не является экземпляром объявляющего класса

кажется «полевой обработчик» не может использоваться несколькими классами, он работает, если я поставить «test.MailBooleanHandler» в поле «прямо» вместо «полевого обработчика». Например:

<field name="testFlag" type="boolean" handler="test.BooleanHandler"> 

Есть ли другой способ, которым я могу использовать «полевой обработчик»?

ответ

0

Я исправил проблему, обратившись к следующему документу.

http://castor-data-binding.github.io/castor/reference-guides/1.3.3/html/XML%20data%20binding.html#xml.field.handler.generalized [1.7.5. Повторное использование ConfigurableFieldHandler для более чем одного определения поля]

Внедрить интерфейс ClonableFieldHandlerMarker и реализовать метод copyFieldHandler() устранит проблему.