Haben Sie eine kurze Frage. Kann jemand JAXB (Marshall) boolesche Felder wie 1 und 0 rendern, anstatt "wahr" und "falsch" auszudrucken?Wie JAXB rendern boolean als 0 und 1, nicht wahr und falsch
Antwort
Sie können ein Parser/Writer-Paar schreiben und die Eigenschaftenzuordnung in JAXB-XML-Bindungen definieren.
Ich würde wahrscheinlich einen Typ Adapter für die Umwandlung eines booleschen in ein int erstellen. Es gibt einige examples im JAXB Benutzerhandbuch.
JAXB bietet einen flexiblen Weg zu customize your bindings. Sie müssen lediglich eine XML-Datei schreiben, die angibt, wie Sie Ihre XML- und Java-Typen binden möchten. In Ihrem Fall könnten Sie eine <javaType>
Deklaration verwenden, in der Sie eine parseMethod
und eine printMethod
angeben können. Diese Verfahren könnten so einfach wie
public boolean myParseBool(String s)
{
return s.equals("1");
}
public String myPrintBool(boolean b)
{
return b ? "1" : "0";
}
Es könnte einfache Möglichkeiten existiert, vielleicht mit DatatypeConverter, aber ich bin nicht genug bewusst dieses Thema, das Ihnen mehr helfen!
Die Adapterklasse:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class BooleanAdapter extends XmlAdapter<Integer, Boolean>
{
@Override
public Boolean unmarshal(Integer s)
{
return s == null ? null : s == 1;
}
@Override
public Integer marshal(Boolean c)
{
return c == null ? null : c ? 1 : 0;
}
}
Verbrauch:
@XmlElement(name = "enabled")
@XmlJavaTypeAdapter(BooleanAdapter.class)
public Boolean getEnabled()
{
return enabled;
}
das gleiche Problem wie user20298 hatte, folgte ich den Hinweis von mtpettyp und angepasst es für meine Konfiguration.
Meine Konfiguration ist: - Maven, um das Projekt zu bauen. - "org.jvnet.jaxb2.maven2" Plugin in Maven. - jaxb 2.2.6 - Bei dieser Gelegenheit wurde ich mache Java-Klassen für die kml 2.2 (ogckml22.xsd)
Und ich eher zufällig auf dem Problem des booleans als ‚wahr/falsch‘ gemacht werden, wenn Google Maps will, dass sie als '1/0' in maven
Dies ist die Plugin-Konfiguration sein:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<generateDirectory>src/main/generated</generateDirectory>
<extension>true</extension>
<removeOldOutput>true</removeOldOutput>
</configuration>
ich zu dem src/main/resources Ordner eine jaxb-Bindungen hinzugefügt. xjb-Datei mit folgendem Inhalt:
<?xml version="1.0" ?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1"
xmlns:kml="http://www.opengis.net/kml/2.2"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<xjc:simple/>
<xjc:javaType name="java.lang.Boolean"
xmlType="xsd:boolean"
adapter="path.to.my.JaxbBooleanAdapter"/>
</globalBindings>
...
...
</bindings>
Die Adapter-Klasse ist wie:
package path.to.my;
import javax.xml.bind.annotation.adapters.XmlAdapter;
/**
* Utility class to correctly render the xml types used in JAXB.
*/
public class JaxbBooleanAdapter extends XmlAdapter<String, Boolean>
{
@Override
public Boolean unmarshal(String v) throws Exception
{
if ("1".equals(v))
{
return true;
}
return false;
}
@Override
public String marshal(Boolean v) throws Exception
{
if (v == null)
{
return null;
}
if (v)
{
return "1";
}
return "0";
}
}
Wie wäre es mit der Bindung an nur Boolesche in einer generierten Klasse? Nicht global für alle booleschen Werte. –
- 1. sql boolean 0/1 Um wahr oder falsch darzustellen
- 2. XML Serialize boolean als 0 und 1
- 3. Ist! 0 und! 1 besser als 1 und 0?
- 4. Warum 0 === -0 ist wahr, aber 1/0 === 1/-0 ist falsch?
- 5. WAHR und FALSCH Sie innerhalb SUM nicht()
- 6. Server Antwort setzt Boolean auf wahr/falsch
- 7. Erhalten Sie boolesche Werte als wahr oder falsch statt 1 oder 0
- 8. Boolean immer als wahr zurück?
- 9. Sollen Booleans in einem XML-Dateiformat als wahr/falsch oder als 1/0 geschrieben werden?
- 10. while-Schleife und interpretieren von Werten als wahr oder falsch
- 11. Convert.ToBoolean und Boolean.Parse akzeptieren nicht 0 und 1
- 12. Ausgabe mit Resampling und Wahr/Falsch Wesen auf 1 oder 0.
- 13. Konzept von wahr, falsch logisch und numerisch?
- 14. Warum denkt Perl, dass '1 und 0' wahr ist?
- 15. Warum wird -0 == 0 als wahr ausgewertet?
- 16. Wie bekomme ich NSJSONSerialization einen Boolean als wahr oder falsch ausgeben?
- 17. Wahr und falsch in einer Funktion def
- 18. Objective-C WAHR/FALSCH vs wahr/falsch
- 19. Wie man 1 und 0 in Ruby auf True und False setzt. Möchten Sie eine boolean oder logisch aus
- 20. PHP Werte als weder wahr noch falsch
- 21. 0 in [1, 2] == wahr, warum?
- 22. Java: Boolean immer wieder wahr
- 23. Wie werden die Strings "1" und "0" in AS3 auf "True" und "False" umgesetzt?
- 24. i = wahr und falsch in Ruby ist wahr?
- 25. Python Listen anhängen Wahr Boolean
- 26. Ober boolean und unteren boolean
- 27. Logische Operatoren (AND, OR) mit NA, WAHR und FALSCH
- 28. Wie wird 0 in JavaScript nicht als falsch bewertet?
- 29. PostgreSQL boolean cast (0 als false)
- 30. 1 == 0 in (0,1) ist falsch; Warum?
Excellent! Genau das, was ich brauchte! –
Warum ist das nicht die akzeptierte Antwort? – kasdega
Gibt es ein Rezept, um dies aus der Bindungsdatei für die Generierung auszuführen, aber nicht global für alle booleschen Werte? –