11
votes

Compiler plusieurs schémas dans différents packages à l'aide de Jaxb 2.1

J'ai un communalpes.xsd que je comprends dans mon tout autre XSDS utilisant XS: inclure. Je reçois xxx

lorsque j'essaie de le compiler dans des packages différents à l'aide de fichiers de liaison. S'il vous plaît dites-moi s'il existe un moyen de les compiler dans différents forfaits. J'utilise Jaxb 2.1


1 commentaires

Veuillez ajouter un exemple de fichier de liaison à votre question


5 Réponses :


5
votes

Je rencontre le même problème et je n'ai pas encore résolu, mais je crains que cela ne puisse pas être possible de générer XSD dans des packages différents:

Il n'est pas légal d'avoir plus d'un schémas> par espace de noms, il est donc impossible d'avoir deux schémas dans le même espace de noms cibles compilé dans différents packages Java

de Restrictions de compilation < / forte> à la fin de cette page

Mais si quelqu'un trouve quelques travaux autour, il suffit de nous informer s'il vous plaît


0 commentaires

6
votes

Ouais, il y a un moyen.
En supposant:

<xjc destdir="${app.src}" readOnly="true" package="mypkg.common">
    <schema dir="${app.schema}/common" includes="*.xsd" />
    <binding dir="${app.schema}/common" includes="*.xjb" />
</xjc>
<xjc destdir="${app.src}" readOnly="true" package="mypkg.foo">
    <schema dir="${app.schema}/foo" includes="*.xsd" />
    <binding dir="${app.schema}/foo" includes="foo.xjb" />
</xjc>


3 commentaires

Ick, n'y a-t-il aucun moyen d'avoir un fichier XJB? Nous avons 20 xsds donc je déteste avoir 20 fichiers XJB.


Oui, vous pouvez avoir plusieurs dans un seul fichier .xjb.


@Tdrury non, il n'est pas possible lorsque fait référence au même cibleNamespace .



6
votes

Comme indiqué déjà par Ben, il n'y a aucun moyen de le faire s'ils ont la même espace de noms. Mais comment le faire si vous avez des espaces de noms différents? xxx

mais assurez-vous de ne pas utiliser le paramètre de ligne de commande --P, car cela remplacera votre configuration.


0 commentaires

4
votes

Je sais que c'est un ancien poste, mais, comme il n'y a pas de réponse à la question exacte, ma proposition:

AS MMOOSSEN expliquée, L'astuce consiste à spécifier différents espaces de noms pour les Xsds fort>. Mais, ajout d'un attribut de noms code> dans le JXB: les liaisons code> ne fonctionne pas: p> xxx pré>

au lieu de cela, Vous devez ajouter un TargeNamespace CODE> Attribut au XS: Schema Code> Tags de votre XSDS STROND>: P>

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
               jaxb:extensionBindingPrefixes="xjc annox inherit">


    <jaxb:bindings schemaLocation="MyFirstXSD.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="com.test.a" />
        </jaxb:schemaBindings>
    </jaxb:bindings>

    <jaxb:bindings schemaLocation="MySecondXSD.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="com.test.b" />
        </jaxb:schemaBindings>
    </jaxb:bindings>

    <jaxb:bindings schemaLocation="MyThirdXSD.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="com.test.c" />
        </jaxb:schemaBindings>
    </jaxb:bindings>

</jaxb:bindings>


0 commentaires

0
votes

peut être fait comme mentionné dans la page d'utilisation du plugin Jaxb Maven Maven en cas d'avoir plusieurs schémas avec une configuration différente.

Les packages distincts peuvent être configurés pour chaque schéma. p> xxx pré>

Exemple complet Configuration ci-dessous: P>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>${project.version}</version>
<executions>
    <execution>
        <id>xjc-schema1</id>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <!-- Use all XSDs under the west directory for sources here. -->
            <sources>
                <source>src/main/xsds/west</source>
            </sources>

            <!-- Package name of the generated sources. -->
            <packageName>se.west</packageName>
        </configuration>
    </execution>
    <execution>
        <id>xjc-schema2</id>
        <goals>
            <goal>xjc</goal>
        </goals>
        <configuration>
            <!-- Use all XSDs under the east directory for sources here. -->
            <sources>
                <source>src/main/xsds/east</source>
            </sources>

            <!-- Package name of the generated sources. -->
            <packageName>se.east</packageName>

            <!--
                Don't clear the output directory before generating the sources.
                Clearing the output directory removes the se.west schema from above.
            -->
            <clearOutputDir>false</clearOutputDir>
        </configuration>
    </execution>
</executions>


0 commentaires