¿Conoce una configuración JAXB para evitar que se genere standalone = "yes" en el XML resultante?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
xml
xsd
jaxb
xml-binding
Johan Pelgrim
fuente
fuente
Respuestas:
Esta propiedad:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
... se puede utilizar para no tener:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Sin embargo, no consideraría esta mejor práctica.
fuente
en JAXB que es parte de JDK1.6
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
fuente
standalone
atributo en la declaración XML.Puedes usar
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
o
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)
para 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" .
fuente
solo si alguien más todavía está luchando con este problema, puede considerar usar
para eliminar toda la declaración XML y simplemente escriba la suya propia
String
al comienzo de su flujo / método de salidafuente
Si hace que el documento dependa de
DOCTYPE
(por ejemplo, utiliza entidades con nombre), dejará de ser independiente, porstandalone="yes"
lo que 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 externos.
No veo cómo esta declaración podría ser un problema, aparte de la interoperabilidad con software que no es compatible con XML, pero con una horrible sopa de expresiones regulares.
fuente
DOCTYPE
?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
fuente
Si está utilizando solo el paquete javax.xml predeterminado, puede establecer la opción JAXB_FRAGMENT del marshaller en 'true' (esto omite la instrucción de procesamiento xml predeterminada) y usar el método writeProcessingInstruction de XMLStreamWriter para insertar el suyo:
fuente
Puede utilizar: marshaller.setProperty ("jaxb.fragment", Boolean.TRUE);
Me funciona en Java 8
fuente
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:
debiera ser:
Si uso la propiedad "interna" como lo hizo, obtengo una javax.xml.bind.PropertyException
fuente
En caso de que obtenga una excepción de propiedad, agregue la siguiente configuración:
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE); jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
fuente
Estoy usando Java 1.8 y JAXB 2.3.1
Primero, asegúrese de usar java 1.8 en pom.xml
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
Luego, en el código fuente usé: (la clave era la parte interna)
// remove standalone=yes marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
fuente
sólo inténtalo
private String marshaling2(Object object) throws JAXBException, XMLStreamException { JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass()); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); StringWriter writer = new StringWriter(); writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); jaxbMarshaller.marshal(object, writer); return writer.toString(); }
fuente
Si usted tiene
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
pero quiero esto:
<?xml version="1.0" encoding="UTF-8"?>
Solo haz:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
fuente