Próbuję wygenerować klasy Java z kilku konkretnych XSD z xjc
. Schematy te mają pewne wspólne definicje, więc importują wiele popularnych XSD. W szczególności mogą zawierać od zera do wszystkich popularnych XSD.Definiowanie nazw pakietów dla typowych XSD z xjc i powiązań
Chciałbym wygenerować wszystkie klasy z określonego XSD do konkretnego pakietu, ale zachowując wygenerowane klasy dla wspólnych schematów w jednym pakiecie, aby nie były powtarzane dla każdego schematu w drzewie źródłowym .
Nauczyłem się, że niestandardowe powiązania mogą być użyte do określenia pakietów na podstawie na schemacie, z na przykład:
<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
<jxb:schemaBindings>
<jxb:package name="mypackage.commonclasses"/>
</jxb:schemaBindings>
</jxb:bindings>
Mam następującą strukturę:
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
to wszystko działa dobrze z:
xjc -b schemas/specific1
-b schemas/common
schemas/specific1/specific1.xsd
to generuje zajęcia dla specific1.xsd
w mypackage.specific1
i wspólnych klas w mypackage.commons
. Ale gdy próbuję wygenerować klas dla specificN
, xjc
wyrzuca następujący błąd:
[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
otrzymuję ten błąd powtarza się za każdym wspólnym XSD nie importowanego w każdym konkretnym XSD.
Czy istnieje sposób, w jaki mogę dokonać xjc
zignorować powiązania w commonBindings.xjb
, które nie są używane w XSD Generowania klas dla?
Albo, czy kieruję się w niewłaściwym kierunku za pomocą tego podejścia i czy powinienem na przykład stosować adnotacje w określonych xsd? Chciałbym, jeśli to możliwe, uniknąć modyfikacji schematów.