xmlrootelement xmlns unmarshal ns2 namespaceprefixmapper namespace annotation jaxb xsd xml-namespaces

jaxb - xmlns - namespaceprefixmapper



Añadiendo espacios de nombres al elemento raíz de xml usando jaxb (1)

A continuación encontrará un código de demostración que producirá el XML que está buscando. Puede usar la propiedad Marshaller.JAXB_SCHEMA_LOCATION para especificar la schemaLocation del schemaLocation esto hará que el espacio de nombres http://www.w3.org/2001/XMLSchema-instance se declare automáticamente.

Manifestación

package myproject.myapp; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(RootElement.class); RootElement rootElement = new RootElement(); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.mysite.com/abc.xsd"); marshaller.marshal(rootElement, System.out); } }

Salida

A continuación se muestra el resultado de ejecutar el código de demostración.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RootElement xmlns="http://www.mysite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/abc.xsd"/>

información del paquete

Esta es la clase de package-info del package-info de su pregunta.

@XmlSchema( namespace = "http://www.mysite.com", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED ) package myproject.myapp; import javax.xml.bind.annotation.*;

RootElement

A continuación se muestra una versión simplificada de su modelo de dominio:

package myproject.myapp; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="RootElement") public class RootElement { }

Estoy creando un archivo xml cuya estructura de elementos raíz debe ser como:

<RootElement xmlns="http://www.mysite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/abc.xsd">

Creé la clase package-info.java pero puedo obtener solo un espacio de nombres al escribir este código:

@XmlSchema( namespace = "http://www.mysite.com", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package myproject.myapp; import javax.xml.bind.annotation.XmlSchema;

¿Alguna idea?