2016-06-06 4 views
0

Ich versuche, den Boolean in String zu ändern, wenn Sie eine XML-Datei erstellen. Hier sind meine Quellen.Castor-XML: Feld-Handler für mehrere Klassen

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; 
    } 
} 

und

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

bekam ich die Ausnahme wie folgt:

java.lang.IllegalArgumentException: Objekt keine Instanz deklarieren Klasse

Es scheint, "field-handler" kann nicht von mehreren Klassen verwendet werden, es funktioniert wenn ich setzen Sie "test.MailBooleanHandler" direkt in das "Feld" anstelle von "field-handler". Zum Beispiel:

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

Gibt es eine andere Möglichkeit, die ich "Feld-Handler" verwenden kann?

Antwort