Ich versuche Java-Klassen aus mehreren bestimmten XSDs mit xjc
zu generieren. Diese Schemas haben einige gemeinsame Definitionen, so dass sie eine Anzahl gängiger XSDs importieren. Insbesondere können sie von Null bis zu allen gängigen XSDs enthalten.Definieren von Paketnamen für allgemeine XSDs mit xjc und Bindungen
Ich möchte alle Klassen von einer bestimmten XSD zu einem bestimmten Paket generieren, aber die generierten Klassen für die allgemeinen Schemas in einem gemeinsamen Paket behalten, damit sie nicht für jedes spezifische Schema in der Quellstruktur wiederholt werden .
Ich habe gelernt, dass benutzerdefinierte Bindungen verwendet werden können Pakete auf einer Pro-Schema Basis angeben, mit zum Beispiel:
<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
<jxb:schemaBindings>
<jxb:package name="mypackage.commonclasses"/>
</jxb:schemaBindings>
</jxb:bindings>
ich die folgende Struktur haben:
schemas
| - common
| | - common1.xsd --> XSD with common types #1
| | - ...
| | - commonN.xsd --> XSD with common types #N
| | - commonBindings.xjb --> Defines package "mypackage.commons" for common*.xsd
| - specific1
| | - specific1.xsd --> Includes ../common/common{1-N}.xsd
| | - specific1.xjb --> Defines package "mypackage.specific1" for specific1.xsd
| - specificN
| | - specificN.xsd --> Includes only ../common/common1.xsd
| | - specificN.xjb --> Defines package "mypackage.specificN" for specificN.xsd
das alles funktioniert gut mit:
xjc -b schemas/specific1
-b schemas/common
schemas/specific1/specific1.xsd
es erzeugt die Klassen für specific1.xsd
in mypackage.specific1
und die gemeinsamen Klassen in mypackage.commons
. Aber wenn ich versuche, für specificN
die Klassen zu erzeugen, wirft xjc
den folgenden Fehler:
[ERROR] "file:/drive/dir/schemas/common/common1.xsd" is not a part of
this compilation. Is this a mistake for "/drive/dir/schemas/common/commonBindings.xjb"?
line 2 of file:/drive/dir/schemas/common/commonBindings.xjb
ich diesen Fehler für jeden gemeinsamen XSD wiederholt bekommen nicht in einem bestimmten XSD importiert.
Gibt es eine Möglichkeit, dass ich xjc
die Bindungen in commonBindings.xjb
ignorieren kann, die nicht in der XSD verwendet werden, für die ich die Klassen erzeuge?
Oder ziele ich mit diesem Ansatz in die falsche Richtung und sollte zum Beispiel Anmerkungen im spezifischen xsd verwenden? Ich möchte vermeiden, die Schemas wenn möglich zu ändern.