xml xsd jaxb xml-binding

Eliminar ''standalone='' yes '''' del XML generado



xsd jaxb (9)

¿Conoces una configuración de JAXB para evitar que se genere de forma autónoma = "sí" en el XML resultante?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>


No tengo una "reputación" lo suficientemente alta como para tener el "privilegio" de comentar. ;-)

@Debasis, tenga en cuenta que la propiedad que ha especificado:

"com.sun.xml.internal.bind.xmlHeaders"

debiera ser:

"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)

Si uso la propiedad "interna" como lo hice, obtengo una javax.xml.bind.PropertyException


Puede usar: marshaller.setProperty ("jaxb.fragment", Boolean.TRUE);

Funciona para mí en Java 8


Puedes usar

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

o

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE)

deshabilitar la declaración XML predeterminada y luego agregar su declaración XML personalizada,

<?xml version="1.0" encoding="UTF-8"?>

por

marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=/"1.0/" encoding=/"UTF-8/"?>");

al xml generado, evitando así la propiedad standalone = "yes" .


Si hace que el documento dependa de DOCTYPE (por ejemplo, utilice entidades con nombre), dejará de ser independiente, por lo que standalone="yes" no se permitirá en la declaración XML.

Sin embargo, el XML independiente se puede usar en cualquier lugar, mientras que el no independiente es problemático para los analizadores XML que no cargan elementos externos.

No veo cómo esta declaración podría ser un problema, aparte de la interoperabilidad con un software que no admite XML, sino una horrible sopa de expresiones regulares.


Si solo está utilizando el paquete javax.xml predeterminado, puede establecer la opción JAXB_FRAGMENT del marcador marshaller en ''true'' (esto omite la instrucción de procesamiento xml predeterminada) y usar el método writeProcessingInstruction de XMLStreamWriter para insertar el suyo propio:

xmlStreamWriter.writeProcessingInstruction("xml", "version=/"1.0/" encoding=/"UTF-8/""); jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE); jaxbMarshaller.marshal(object, xmlStreamWriter); xmlStreamWriter.writeEndDocument();


en JAXB que es parte de JDK1.6

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);


solo si alguien más todavía está luchando con este problema, puede considerar usar

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

para eliminar toda la declaración XML y simplemente escribir su propia String al comienzo de su flujo / método de salida


marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);

se puede usar para no tener

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Sin embargo, no consideraría esta mejor práctica.


jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=/"1.0/" encoding=/"UTF-8/" standalone=/"no/"?>");

Esto funcionó para mí con JDK1.7. standalone = / "no /" se puede eliminar para obtener solo el resto de la parte xml