JAXB "noch seine super-Klasse bekannt ist in diesem Kontext" vermeiden @XmlSeeAlso

Erklärung & Workaround

Derzeit bin ich mit JAX-RS und Vermietung JAXB-bindings automatisch Griff Konvertierung der Daten in XML und JSON für mich in einer JEE6-Projekt. Alles funktioniert absolut fantastisch, bis ich versuchen, erstellen Sie eine Allgemeine response-Objekt zu wickeln alle meine Informationen.

Wenn ich versuchen, mit meinem generic-Antwort-Klasse com.eln00b.Wrapper (enthält eine private Object result Attribut) bekomme ich:

javax.xml.binden.MarshalException - mit linked exception: [com.Sonne.istack.SAXException2: class com.eln00b.CustomObject noch seine super-Klasse bekannt ist zu diesem Kontext. javax.xml.binden.JAXBException: class com.eln00b.CustomObject noch seine super-Klasse bekannt ist zu diesem Kontext.]

Also ich com.eln00b.Wrapper:

@XmlSeeAlso ({com.eln00b.CustomObject})
public class Wrapper {
}

Alles funktioniert einwandfrei.

Das Problem

Möchte ich, dass dies extrem generisch. Ich will nicht t ständig zu Klassen hinzufügen, um die @XmlSeeAlso annotation auf der com.eln00b.Wrapper Klasse. Wie tun ich habe das system automatisch lokalisieren alle meine Klassen für die JAXB-Kontext?

Selbst wenn es einen hack wo ich so etwas wie Reflexionen um die Daten zu laden, ist das in Ordnung. Ich bin mir nur nicht sicher wie man den Kontext zum laden von Daten, ohne die @XmlSeeAlso annotation. Mit der großen Menge von Anmerkungen, die ich erstellen werde, wird es einfach nicht funktionieren.

, Wie Es Manuell Gearbeitet

Funktionierte es nur manuell, indem die Daten wie dabei die manuelle Konvertierungen. Allerdings glaube ich nicht wollen, verwenden Sie die manuelle XML - /JSON-Erstellung, es sei denn, ich brauche unbedingt (ich will nicht zu viel mit content negotiation oder etwas in der Art).

Beispiel:

JAXBContext.newInstance(new Class[] {Wrapper.class, CustomObject.class});
Die catch-all-Technik wäre der JAXBContext von einem Doppelpunkt getrennte Liste von Paketen, die eine oder mehr enthalten könnte alle diese Klassen. Klar, etwas Hinweis muss gegeben werden, um Kontext zu schaffen - sonst wird die Grenze des expandierenden Universums wäre die Grenze 😉
Das wäre fein, aber wie sage ich der EE6-container, die JAXBContext zu verwenden? Ist es genauso einfach wie das erstellen einer @Provider?
Ich habe festgestellt, das in der JAX-RS-Dokumentation: "Allerdings, wenn die Standard-JAXBContext Klasse nicht geeignet ist, dann können Sie liefern eine JAXBContext Klasse für die Anwendung mit JAX-RS-provider interface ContextResolver." Ich würde Graben müssen, um in wehre wissen Sie wahrscheinlich mehr als ich, näher. Sorry.
Ich habe nicht gesehen, dass in der Dokumentation. Ich werde schauen es und sehen, was Los ist. Wenn ich es bekomme, zu arbeiten (oder wenn nicht) werde ich die Ergebnisse hier posten.
Abschnitt: "Mithilfe von JAX-RS Mit JAXB" docs.oracle.com/javaee/6/tutorial/doc/gkknj.html

InformationsquelleAutor el n00b | 2014-08-20

Schreibe einen Kommentar