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(), чтобы устранить проблему.