Używam wtyczki maven jaxb2 do generowania klas Java, zbudowanych ze schematów w słoiku. Jednak nie jestem pewien, jak poprawnie zlokalizować te schematy z pliku powiązań. Jeśli wyodrębnię schematy ze słoika i upuść je w tym samym katalogu, co powiązania, wszystko jest w porządku. Nie jest to jednak praktyczne rozwiązanie długoterminowe.
Pom.xml:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemas>
<schema>
<dependencyResource>
<groupId>com.test</groupId>
<artifactId>schemas</artifactId>
<version>1.10-SNAPSHOT</version>
<resource>schemas/schema.xsd</resource>
</dependencyResource>
</schema>
</schemas>
<bindingDirectory>bindings</bindingDirectory>
<generatePackage>test.package</generatePackage>
<bindingIncludes>
<include>*.xml</include>
</bindingIncludes>
<extension>true</extension>
</configuration>
</plugin>
Wiązania.xml:
<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb ./bindingschema_2_1.xsd"
version="2.1">
<jxb:bindings schemaLocation="classpath:/schemas/schema.xsd" node="/xs:schema">
<jxb:bindings node="//xs:complexType[@name='AbstractChangeable']">
<jxb:class implClass="com.test.AbstractEntity" />
</jxb:bindings>
</jxb:bindings>
3 odpowiedzi
Chciałbym, żeby tutaj pracowało coś takiego:
<jaxb:bindings schemaLocation="maven:org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-tests-po!/purchaseorder.xsd" node="/xs:schema">
<jaxb:schemaBindings>
<jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/>
</jaxb:schemaBindings>
</jaxb:bindings>
Ale w tej chwili tak nie jest. Proszę zgłosić problem, postaram się go naprawić.
To, co teraz działa, to wiązanie oparte na SCD:
<jaxb:bindings scd="x-schema::po" xmlns:po="urn:po">
<jaxb:schemaBindings>
<jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/>
</jaxb:schemaBindings>
</jaxb:bindings>
Więc tak naprawdę nie musisz wiązać się na podstawie określonej lokalizacji schematu, możesz wiązać na podstawie identyfikatora URI przestrzeni nazw, co jest teoretycznie lepsze.
Praktycznie mam doświadczenie, że wiązania SCD nie zawsze działają niezawodnie.
AKTUALIZACJA
Zobacz ten link, aby uzyskać więcej informacji na temat użycia SCD w JAXB.
Musisz użyć maven-dependency-plugin:unpack
a następnie wskaż maven-jaxb2-plugin
na outputDirectory
. W takim przypadku w wiązaniu pliku musisz powiedzieć coś takiego jak schemaLocation="../target/schemas/schema.xsd"
Wiem, że to stare pytanie, ale zmagałem się z tym samym problemem. Odkryłem, że robienie wiązań inline rozwiąże problem. Nie będziesz już potrzebował pliku powiązania, a powiązania zostaną przeniesione do projektów w zależności od niego.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].