IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Customizing JAXB bindings [JAXB]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut Customizing JAXB bindings
    Bonjour à tous,

    Je dois utiliser JAXB pour générer des classes à partir d'un fichier XSD que j'ai reçu d'une source externe (et donc que je ne souhaite pas modifier). Je reçois actuellement des erreurs de conflits entre des noms de classe car je me suis aperçue qu'il y a des éléments qui sont définis à plusieurs endroits, et qui sont différents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	<xsd:complexType name="SomeNode1">
    		<xsd:sequence>
    			<xsd:element name="transaction" minOccurs="0">
    				<xsd:complexType>
    					...
    				</xsd:complexType>
    			</xsd:element>
    		</xsd:sequence>
    	</xsd:complexType>
    	<xsd:complexType name="SomeNode2">
    		<xsd:sequence>
    			...
    			<xsd:element name="transaction">
    				<xsd:complexType>
    					...
    				</xsd:complexType>
    			</xsd:element>
    		</xsd:sequence>
    	</xsd:complexType>
    J'obtiens donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    org.xml.sax.SAXParseException: A class/interface with the same name "somePackage.Transaction" is already in use. Use a class customization to resolve this conflict.
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:116)
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:77)
    	at com.sun.tools.xjc.generator.bean.ImplStructureStrategy$1.createClasses(ImplStructureStrategy.java:78)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassDef(BeanGenerator.java:403)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.getClazz(BeanGenerator.java:435)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:202)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:175)
    	at com.sun.tools.xjc.model.Model.generateCode(Model.java:286)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.generateCode(RawXJC2Mojo.java:646)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:259)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:134)
    	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:1205)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:1038)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:643)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    	at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    [ERROR] Error while generating code.Location [ file:/...file.xsd{383,22}].
    org.xml.sax.SAXParseException: (Relevant to above error) another "Transaction" is generated from here.
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:119)
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:77)
    	at com.sun.tools.xjc.generator.bean.ImplStructureStrategy$1.createClasses(ImplStructureStrategy.java:78)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassDef(BeanGenerator.java:403)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.getClazz(BeanGenerator.java:435)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:202)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:175)
    	at com.sun.tools.xjc.model.Model.generateCode(Model.java:286)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.generateCode(RawXJC2Mojo.java:646)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:259)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:134)
    	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:1205)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:1038)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:643)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    	at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    J'ai donc voulu donner des nouveaux noms différents à ces 2 types, via un fichier de binding jaxb :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <jaxb:bindings schemaLocation="../...file.xsd">
        <jaxb:bindings node="//xsd:complexType[@name='SomeNode1']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName1" />
        </jaxb:bindings>
        <jaxb:bindings node="//xsd:complexType[@name='SomeNode2']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName2" />
        </jaxb:bindings>
      </jaxb:bindings>
    J'obtiens toujours la même erreur. J'ai pensé que je n'utilisais pas le fichier de binding mais selon mes traces, c'est bien le bon répertoire qui est utilisé...

    Une idée pour passer outre ce problème?

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    C'est le fichier xjb complet? Pourquoi les namespaces et leurs préfixes ne sont définis nulle part?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut
    Il n'est pas complet, j'ai juste mis la partie pertinente pour le problème.

    Je rajoute que lorsque le schema path est mauvais j'ai une erreur à ce sujet, il utilise donc bel et bien ce fichier xjb

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Vous voulez dire vous avez fixé le problème? le schema path est mauvais et vous avez le fixé, c'est ça? Je n'ai pas compris.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut
    Non ce n'est pas fixé

    Je veux dire que si je mets (volontairement) un mauvais path dans le schemaLocation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jaxb:bindings schemaLocation="../...MauvaisChemin.xsd">

    Alors lorsque je build :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error while parsing schema(s).Location [ file:/file.xjb{14,97}].
    com.sun.istack.SAXParseException2: "file:/...MauvaisChemin.xsd" is not a part of this compilation. Is this a mistake for "file:file.xsd"?
    Ce qui me fait penser qu'il a bien lu le fichier xjb car si il ne le lisait pas, il ne déclencherait pas d'erreur.

    J'ai également vérifié mon namespace en mettant un mauvais volontairement, j'obtenais également une erreur -> Il trouve donc bien le fichier xsd

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 576
    Par défaut
    C'est un xpath dont on te parlait, pas un file path.

    De plus la question portait sur le namespace, ce qui n'a rien à voir avec trouver des fichiers.

    En gros, xmlns:xsd, dans ton fichier .xjb. Est-il défini ? Comment et où ?

    Si tu remplaces //xsd:complexType[@name='SomeNode1']/xsd:sequence/xsd:element[@name='transaction'] par /toto:pouet, est-ce que tu as une erreur différente ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    [0] Ok. Dans ce cas-ci, je dirais le path relatif dans le fichier xjb est le path relatif à le répertoire où se trouve le fichier xjb. (En tout cas je ne sais quoi les trois points signifient; je reconnais très bien les deux points, mais trois?!)

    Supposons les répertoires se configurent comme ça:
    • workspace/
      • classes/xyz.xjb
      • common/schema/file.xsd

    Le path relatif de schemaLocation devient quelque chose comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    schemaLocation="../common/schema/file.xsd"
    [1] Maintenant le xjb, vous pouvez faire: je peux baser sur le fait que le complexType's sont nommés, donc, ils sont forcément les "top-level" éléments. Soyez correct à cet égard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      <jaxb:bindings node="/xs:schema" schemaLocation="../common/schema/file.xsd">
        <jaxb:bindings node="/xsd:complexType[@name='SomeNode1']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName1" />
        </jaxb:bindings>
        <jaxb:bindings node="/xsd:complexType[@name='SomeNode2']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName2" />
        </jaxb:bindings>
      </jaxb:bindings>
    Voilà!

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut
    Excusez-moi si je m'exprime mal, j'ai le sentiment de ne pas me faire comprendre comme il faut

    Ce que j'ai mis comme code n'était qu'un extrait. Voici un extrait plus complet (je ne le mets pas en entier parce que j'ai beaucoup d'autres choses sans lien avec ceci, mais vous trouverez ici tout ce dont vous avez besoin je pense. De plus, les "..." représentent mon chemin complet dans ce message, pour plus de visibilité je préfère ne pas mettre le chemin complet):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      jaxb:extensionBindingPrefixes="xjc simplify" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.1">
     
      <jaxb:globalBindings localScoping="toplevel">
        ... (cette partie n'a rien à voir avec le sujet, je ne la mets donc pas)
      </jaxb:globalBindings>
     
     
      <jaxb:bindings node="/xsd:schema" schemaLocation="../.../file.xsd">
        <jaxb:bindings node="//xsd:complexType[@name='SomeName1']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName1" />
        </jaxb:bindings>
        <jaxb:bindings node="//xsd:complexType[@name='SomeName2']/xsd:sequence/xsd:element[@name='transaction']">
          <jaxb:class name="SomeOtherName2" />
        </jaxb:bindings>
      </jaxb:bindings>
     
    </jaxb:bindings>

    J'obtiens toujours l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    [ERROR] Error while generating code.Location [ file:/.../file.xsd{245,22}].
    org.xml.sax.SAXParseException: A class/interface with the same name "somePackage.Transaction" is already in use. Use a class customization to resolve this conflict.
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:116)
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:77)
    	at com.sun.tools.xjc.generator.bean.ImplStructureStrategy$1.createClasses(ImplStructureStrategy.java:78)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassDef(BeanGenerator.java:403)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.getClazz(BeanGenerator.java:435)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:202)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:175)
    	at com.sun.tools.xjc.model.Model.generateCode(Model.java:286)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.generateCode(RawXJC2Mojo.java:646)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:259)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:134)
    	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:1205)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:1038)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:643)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    	at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    [ERROR] Error while generating code.Location [ file:/.../file.xsd{383,22}].
    org.xml.sax.SAXParseException: (Relevant to above error) another "Transaction" is generated from here.
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:119)
    	at com.sun.tools.xjc.util.CodeModelClassFactory.createClass(CodeModelClassFactory.java:77)
    	at com.sun.tools.xjc.generator.bean.ImplStructureStrategy$1.createClasses(ImplStructureStrategy.java:78)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassDef(BeanGenerator.java:403)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.getClazz(BeanGenerator.java:435)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:202)
    	at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:175)
    	at com.sun.tools.xjc.model.Model.generateCode(Model.java:286)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.generateCode(RawXJC2Mojo.java:646)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:259)
    	at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:134)
    	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:1205)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:1038)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:643)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    	at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)

    Je pense que mon problème se situe là : mon complexType n'est pas nommé, et il est directement défini à l'endroit où j'en ai besoin, c'est-à-dire dans un autre complexType qui lui, est nommé et "toplevel" (fils de xsd:Schema directement)

    En effet si je regarde la ligne qui m'est donnée, elle correspond à la ligne en gras ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	<xsd:complexType name="SomeName1">
    		<xsd:sequence>
    			...
    			<xsd:element name="transaction">
    				<xsd:complexType>
    					<xsd:sequence>
    						<xsd:element name=.../>
    						<xsd:element name=.../>
    					</xsd:sequence>
    				</xsd:complexType>
    			</xsd:element>
    		</xsd:sequence>
    	</xsd:complexType>
    Et non à la ligne "element", or mon xpath fait référence à un élément...! Mais comment lorsque je modifie mon binding file comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <jaxb:bindings schemaLocation="../.../file.xsd">
        <jaxb:bindings node="//xsd:complexType[@name='SomeName1']/xsd:sequence/xsd:element[@name='transaction']/xsd:complexType">
          <jaxb:class name="SomeOtherName1" />
        </jaxb:bindings>
        ...
      </jaxb:bindings>
    J'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ERROR] Error while parsing schema(s).Location [ file:/.../file.xjb{21,144}].
    com.sun.istack.SAXParseException2: XPath evaluation of "//xsd:complexType[@name='SomeName1']/xsd:sequence/xsd:element[@name='transaction']/xsd:complexType" results in empty target node

  9. #9
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    D'accord. Mais à mon avis il faut toujours mettre des choses respectant l'idiosynchrasie de la technologie en question pour que l'on ne soit pas trop distract (comme par exemple x/y/file.xsd ou autrement).

    Je pense vous êtes dans la bonne voie. Il faut "customize" le type complexe anonyme au lieu de l'élément dans le cas-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      <jaxb:bindings node="/xs:schema" schemaLocation="../common/schema/file.xsd">
        <jaxb:bindings node="./xsd:complexType[@name='SomeNode1']/xsd:sequence/xsd:element[@name='transaction']/xsd:complexType">
          <jaxb:class name="SomeOtherName1" />
        </jaxb:bindings>
      </jaxb:bindings>
     
    <jaxb:bindings node="/xs:schema" schemaLocation="../common/schema/file.xsd">
        <jaxb:bindings node="./xsd:complexType[@name='SomeNode2']/xsd:sequence/xsd:element[@name='transaction']/xsd:complexType">
          <jaxb:class name="SomeOtherName2" />
        </jaxb:bindings>
      </jaxb:bindings>
    Si il dit qu'il ne trouve que un élément vide, il faut donc montrer une version de xsd plus réalistic même toujours figurative.
    ps: J'ai un typo dans mon poste précedant: il y manque un point devant /xsd:complexType[@name='SomeNode1'] etc.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut
    J'ai copié votre code mais j'ai toujours la même erreur (empty target node). Je ne comprends pas ce que vous suggérez dans ce cas, changer la version de xmlSchema?

    EDIT : J'aurais du faire plus attention : le message d'erreur ne se trouvait que sur un seul élément précis, or cet élément ne devait pas s'y trouver car effectivement, ce n'était pas un complexType

    Merci de votre aide !

  11. #11
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Voulez-vous poster le xsd? Il est possible qu'il n'est pas tout à fait correct. Mais, je n'insiste pas. Je pense à l'étape présente de ce que vous montrez déjà, il devrait macher comme tel.

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 35
    Par défaut
    Distraction de ma part :-) cela fonctionne
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAXB] binding fichier xml par jaxb
    Par totomimi dans le forum Persistance des données
    Réponses: 3
    Dernier message: 01/08/2009, 16h33
  2. absence de dossier "build "après de jaxb binding
    Par totomimi dans le forum NetBeans
    Réponses: 0
    Dernier message: 12/07/2009, 14h43
  3. [JAXB 2.0] customization attribute
    Par noOneIsInnocent dans le forum Persistance des données
    Réponses: 1
    Dernier message: 26/06/2008, 10h06
  4. [WPF] Binding et type custom
    Par sehshe dans le forum Framework .NET
    Réponses: 6
    Dernier message: 09/01/2008, 10h19
  5. Binding d'un datanhandler avec JAXWS/JAXB
    Par annerezo dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 05/11/2007, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo