Kompiliere mehrere XSDs, die doppelte Definitionen desselben Elements mit JAXB enthalten

8

Frage: Wie mache ich xjc / Jaxb die propper javaclasses für mehrere Schemas generieren, die doppelte Elementdefinitionen im selben Namespace enthalten?

Informationen: Ich habe drei .xsd Schemata: A, B und C. Alle haben den gleichen Zielnamenraum. Sie sind alle 3 Shemas, die mir gegeben wurden, und ich bin nicht in der Lage, sie irgendwie zu verändern.

Sie A hat einige Elemente, die auch in B oder C vorkommen (aber A hat auch viele selbst deklarierte Elemente) Beispiel: Dies ist der gleiche "Code" für A und C:

%Vor%

Wenn ich xjc verwende, um sie in Java-Klassen zu kompilieren, bekomme ich die folgende Ausnahme:

%Vor%

und das Gleiche passiert mit den anderen Elementen: arcgYearType, arcgYearMonthType und arcDateType.

Ich habe über eine verbindliche Datei gelesen, die dieses Problem möglicherweise lösen könnte, aber ich bin mir nicht sicher, wie das geht, daher werden Beispiele sehr bevorzugt.

    
Sofus Albertsen 13.03.2012, 12:30
quelle

2 Antworten

0

Sie können Konflikte manuell mithilfe der Bindungsdatei lösen. Hier ist das Beispiel, in dem Sie Ihren benutzerdefinierten Namen für widersprüchliche Namen angeben können:

%Vor%     
Sergey Aslanov 13.03.2012, 12:40
quelle
2

Von dem, was Sie beschreiben, nehme ich an, dass zwischen den XSD-Dateien keine Include-Beziehung besteht. Außerdem muss ich davon ausgehen, dass Sie versuchen, Klassen wiederzuverwenden, in denen sich Inhalte überschneiden.

Der einfache Ausweg besteht darin, jede Datei unabhängig voneinander zu "kompilieren" und für jede der XSD-Dateien ein anderes Java-Paket bereitzustellen. Das Problem hier ist, dass, wenn Sie versuchen, Inhalt von einem XML zu einem anderen zu "verketten" (dh unmarshall von A und dann Marshall zu B), dann Klasse C1 in Paket com.A, und Klasse C1 in Paket com.B, while Übereinstimmungen mit demselben komplexen XSD-Typ sind nicht "austauschbar"; Sie müssen eine Umwandlung zwischen ihnen entwickeln. Sie benötigen eine benutzerdefinierte Bindungsdatei oder, wenn Sie NetBeans verwenden, einfach verschiedene Pakete im JAXB-Assistenten.

Der beste Weg könnte sein, Episoden zu verwenden (siehe dies auf SO ). Verarbeiten Sie A.xsd und verwenden Sie dann diese Episode, um B.xsd usw. zu verarbeiten.

    
Petru Gardea 13.03.2012 13:08
quelle

Tags und Links