JAXB pour les Liaisons de schémas dans un BOCAL
Je suis en utilisant le maven jaxb2 plugin pour générer des classes Java, construit à partir de schémas dans un bocal. Cependant, je ne suis pas sûr de la façon de localiser correctement à ces schémas à partir d'un fichier de liaisons. Si Iextract les schémas à partir du pot et de les déposer dans le même répertoire que les liaisons, tout est bien. Cependant, ce n'est pas une pratique à long terme de la solution.
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>
bindings.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>
OriginalL'auteur user1234057 | 2012-02-29
Vous devez vous connecter pour publier un commentaire.
Ce que j'aimerais avoir de travail ici est quelque chose comme:
Mais il n'a pas pour le moment. Veuillez fichier un problème, je vais essayer de corriger ça.
Ce qui fonctionne maintenant est SCD-en fonction de liaison:
De sorte que vous n'avez pas réellement besoin de se lier sur la base d'un schéma de l'emplacement, vous pouvez lier basé sur l'URI d'espace de noms, ce qui est théoriquement mieux.
Pratiquement j'ai une expérience que SCD-les liaisons ne sont pas toujours fiable.
Mise à JOUR
Voir ce lien pour plus d'informations SCD de l'utilisation de JAXB.
J'ai posté l'exemple ci-dessus. Vous devez spécifier le préfixe d'espace de noms (
xmlns:po="urn:po"
) et utiliser ce préfixe dans le scd de l'expression (scd="x-schema::po"
signifie "adresse le schéma avec l'espace de noms cible du préfixepo
"). Voir ce lien: jaxb.java.net/guide/Using_SCD_for_customizations.htmlNous n'avons pas vraiment comprendre comment référencer un maven pot avec cette méthode, mais nous allons attendre jusqu'à ce que le plugin est mis à jour. Merci pour l'aide!
Vous n'avez pas besoin de faire référence à une maven pot avec cette méthode. Qui est, vous ne dites pas "je me réfère à cet élément à partir de ce schéma à partir de ce POT". Au lieu de vous faire la liaison via l'espace de noms, ce qui est purement logique. Ce que vous exprimez avec la DRÉPANOCYTOSE est "je me réfère à un élément du schéma avec l'espace de noms donné". Peu importe où le schéma vient de. Et s'il vous plaît fichier un problème, sinon je ne sais pas qui un pourquoi est intéressé par cette fonctionnalité.
ce problème résolu dans le plugin - si vous ne voulez pas aller à la DRÉPANOCYTOSE, l'approche basée?
OriginalL'auteur lexicore
Vous devez utiliser
maven-dépendance-plugin:déballez
et puis pointmaven-jaxb2-plugin
àoutputDirectory
. Dans ce cas, la liaison de fichier que vous devez dire quelque chose commeschemaLocation="../target/schemas/schema.xsd"
Cela ne fonctionne pas comme décompressez est liée à générer des ressources objectif et xjc s'exécute dans generate-sources but, qui est l'étape précédente
Vous pouvez lier
unpack
àgenerate-sources
phase (ou plus tôt). Des difficultés?Merci @dma_k - je lié à
initialize
phase et à mesure de l'obtenir pour travaillerOriginalL'auteur dma_k
Je sais que c'est une vieille question, mais j'ai été aux prises avec le même problème. J'ai constaté que le fait de inline liaisons permettrait de résoudre le problème. Vous n'avez plus besoin pour la liaison de fichiers et les liaisons seraient reportés pour des projets en fonction de cela.
OriginalL'auteur Rey Pader