Sie könnten JAXBIntrospector nutzen folgendes zu tun:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBIntrospector;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.namespace.QName;
public class Demo {
public static void main(String[] args) throws Exception {
Object value = "Hello World";
//Object value = new Bar();
JAXBContext jc = JAXBContext.newInstance(String.class, Bar.class);
JAXBIntrospector introspector = jc.createJAXBIntrospector();
Marshaller marshaller = jc.createMarshaller();
if(null == introspector.getElementName(value)) {
JAXBElement jaxbElement = new JAXBElement(new QName("ROOT"), Object.class, value);
marshaller.marshal(jaxbElement, System.out);
} else {
marshaller.marshal(value, System.out);
}
}
@XmlRootElement
public static class Bar {
}
}
Mit dem obigen Code, wenn der JAXBElement vermarshallten ist, wird es mit einem xsi qualifiziert werden: type-Attribut entsprechend dem entsprechenden Schematyp:
<ROOT
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Hello World</ROOT>
um die Qualifikation zu beseitigen können Sie einfach die Zeile, die die JAXBElement zu erstellt:
JAXBElement jaxbElement = new JAXBElement(new QName("ROOT"), value.getClass(), value);
Dies wird in der folgenden XML-Ergebnis:
<ROOT>Hello World</ROOT>
Funktioniert perfekt! Vielleicht wissen Sie, wie Sie das Attribut "xsi: type" loswerden können? Das bekomme ich für ein 'String'-Objekt:' (239) 555 2390 ' –
yegor256
@Vincenzo Ich habe meine Antwort mit Details zur Beseitigung des xsi: type Attributs aktualisiert. –
@BlaiseDoughan bitte sehen Sie dieses Problem: http://stackoverflow.com/questions/26816798/objectfactory-methods-generated-by-jaxb – Spartan