Tengo una pregunta rápida. ¿Alguien sabe cómo dejar que JAXB (marshall) represente campos booleanos como 1 y 0 en lugar de imprimir "verdadero" y "falso"?Cómo dejar que JAXB represente booleano como 0 y 1, no verdadero y falso
Respuesta
Puede escribir un par de analizadores/escritores y definir la asignación de propiedades en el enlace de JAXB XML.
Probablemente crearía un adaptador de tipo para convertir un booleano en un int. Hay algunos examples en la guía de usuarios de JAXB.
JAXB ofrece una forma flexible de customize your bindings. Simplemente tiene que escribir un archivo XML que indicará cómo desea vincular sus tipos XML y Java. En su caso, podría usar una declaración <javaType>
, en la que puede especificar un parseMethod
y un printMethod
. Estos métodos pueden ser tan simples como
public boolean myParseBool(String s)
{
return s.equals("1");
}
public String myPrintBool(boolean b)
{
return b ? "1" : "0";
}
podrían existir formas más sencillas, tal vez utilizando DatatypeConverter, pero no soy lo suficientemente consciente de este tema para ayudar más!
La clase adaptador:
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;
}
}
Uso:
@XmlElement(name = "enabled")
@XmlJavaTypeAdapter(BooleanAdapter.class)
public Boolean getEnabled()
{
return enabled;
}
Tener el mismo problema que user20298, I siguió la pista por mtpettyp, y adaptado para mi configuración.
Mi configuración es: - maven para construir el proyecto. - complemento "org.jvnet.jaxb2.maven2" en maven. - jaxb 2.2.6 - En esta ocasión, yo estaba haciendo clases de Java para el kml 2,2 (ogckml22.xsd)
Y me encontré con el problema de los booleanos que se representa como 'verdadero/falso', cuando los mapas de Google quiere que sean como '1/0'
Ésta es la configuración del plugin de Maven:
<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>
que añaden a las src/main/resources carpeta a JAXB encuadernaciones. archivo xjb con el siguiente contenido:
<?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>
La clase de adaptador es como:
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";
}
}
¿Qué tal aplicar el enlace a solo booleanos en una clase generada? No globalmente para todos los booleanos. –
- 1. Cómo convertir "0" y "1" a falso y verdadero
- 2. XML Serialize booleano como 0 y 1
- 3. PHP booleano VERDADERO/FALSO?
- 4. Cómo convertir 1 y 0 en verdadero y falso en Ruby. ¿Quieres un booleano o lógico a cabo
- 5. Serialize Boolean a "1" y "0" en lugar de "verdadero" y "falso"
- 6. C99 - ¿por qué son falsos y verdaderos definidos como 0 y 1 y no como ((bool) 0) y ((bool) 1)?
- 7. C++ bool devuelve 0 1 en lugar de verdadero falso
- 8. ¿Se garantiza que False "es 0" y verdadero "es 1"?
- 9. Cambiar etiquetas "Verdadero" y "Falso" de un parámetro booleano
- 10. ¿Hay una diferencia entre SÍ/NO, VERDADERO/FALSO y verdadero/falso en objetivo-c?
- 11. Cómo tener PHP FALSO booleano a enviar como FALSO única
- 12. Al convertir un booleano en un entero, devuelve -1 verdadero?
- 13. ¿Existe un valor booleano verdadero/falso incorporado en Perl?
- 14. ¿Por qué (1 en [1,0] == Verdadero) evaluar a Falso?
- 15. jQuery IU diálogo con retorno booleano - verdadero o falso
- 16. Xml Serialización contra "Verdadero" y "Falso"
- 17. C++ palabras clave 'verdadero' y 'falso' de repente no es verdadero o falso en Visual C++ 6.0
- 18. Código correcto para convertir bool [] -> "falso, verdadero, verdadero, falso"
- 19. Javascript VERDADERO y "verdadero" ¿por qué alguien usa cadena en lugar de booleano?
- 20. ¿Cómo funciona el verdadero/falso en PHP?
- 21. El siguiente código imprime "verdadero, verdadero, falso, verdadero". ¿No debería ser "verdadero, verdadero, verdadero"?
- 22. Excel: ¿VLOOKUP que devuelve verdadero o falso?
- 23. Como llegar al azar 0 y 1 los números
- 24. ¿Cómo hacer que una variable booleana cambie entre verdadero y falso cada vez que se invoca un método?
- 25. Cómo evitar que Closure Compiler cambie el nombre a "verdadero", "falso" y "nulo"
- 26. ¿Cuándo puede a == b ser falso y a.Equals (b) verdadero?
- 27. Haga que IIS no represente páginas como WML. ¡Nunca!
- 28. Devuelve verdadero/falso a javascript desde el archivo php
- 29. ¿Por qué la alerta (!! "0") y la alerta (falsa == "0") salen verdaderas en JavaScript
- 30. ¿Qué significa! 1 y! 0 en Javascript?
Excelente! ¡Justo lo que necesitaba! –
¿Por qué no es esta la respuesta aceptada? – kasdega
¿Hay una receta para hacer esto desde el archivo de enlaces para la generación, pero no globalmente en todos los booleanos? –