Castor-XML: обработчик полей для нескольких классов

Я пытаюсь изменить логическое значение на строку при создании файла 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">

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

1 ответ

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

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

Реализуйте интерфейс ClonableFieldHandlerMarker и реализуйте метод copyFieldHandler(), чтобы устранить проблему.

Другие вопросы по тегам