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

Services Web Java Discussion :

Axis vs CXF => inner classes ?


Sujet :

Services Web Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut Axis vs CXF => inner classes ?
    Bonjour,

    J'ai un petit soucis avec la génération des classes Java par Axis ou CXF.
    J'ai lr WSDL suivant à partir duquel je souhaite générer les classes Java pour être client du web service concerné :
    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
    <?xml version="1.0" encoding="UTF-8"?>
        <wsdl:definitions name="monWebService_publics" targetNamespace="com.namespace2"
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
          xmlns:wsdns1="com.namespace"
          xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns:tns="com.namespace2">
        <wsdl:types>
            <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="com.namespace" xmlns:dx="com.namespace">
              <xsd:element name="Root">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Structure">
                      <xsd:complexType>
                        <xsd:sequence>
                          <xsd:element name="SousStructure" nillable="true">
                            <xsd:complexType>
                              <xsd:sequence>
                                <xsd:element name="Valeur" type="xsd:string"/>
                              </xsd:sequence>
                            </xsd:complexType>
                          </xsd:element>
                        </xsd:sequence>
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:schema>
        </wsdl:types>
    	<!-- J'ai enlevé la partie concernant la définition du service car pas utile pour mon problème a priori -->
        </wsdl:definitions>
    Lorsque les classes sont générées par axis depuis maven :
    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
    <plugin>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>axistools-maven-plugin</artifactId>
       <executions>
          <execution>
             <id>generate-sources</id>
             <phase>generate-sources</phase>
             <goals>
                <goal>wsdl2java</goal>
             </goals>
             <configuration>
                <serverSide>false</serverSide>
                <useEmitter>true</useEmitter>
                <mappings>
                   <mapping>
                      <namespace>com.namespace</namespace>
                      <targetPackage>com.monApp.wsClient</targetPackage>
                   </mapping>
                </mappings>
                <typeMappingVersion>1.2</typeMappingVersion>
                <wrapArrays>false</wrapArrays>
             </configuration>
          </execution>
       </executions>
    </plugin>
    Alors ça génère plein de classes différentes :
    Root.java
    Structure.java
    SousStructure.java

    En revanche si j'essaye de faire pareil par CXF depuis maven :
    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
    <plugin>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-codegen-plugin</artifactId>
       <executions>
          <execution>
             <id>generate-sources</id>
             <configuration>
                <wsdlOptions>
                   <wsdlOption>
                      <wsdl>src/main/resources/wsdl/monWsdl.wsdl</wsdl>
                   </wsdlOption>
                </wsdlOptions>
             </configuration>
             <goals>
                <goal>wsdl2java</goal>
             </goals>
          </execution>
       </executions>
    </plugin>
    Alors il me génère uniquement la classe Root.java qui contient une inner class Structure qui contient elle-même une inner class SousStructure.

    Comment faire pour avoir une génération similaire à celle d'axis (une classe par fichier) ? J'ai essayé de me tourner vers un binding file (xjb) mais sans succès car je ne connais pas trop ce qu'il est possible d'y faire...

    Si quelqu'un à une idée je suis bien évidemment preneur !
    A défaut si quelqu'un connait une ressource bien faite pour expliquer ce qu'il est possible de faire dans un binding file je suis aussi preneur

  2. #2
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Comment a été générer le WSDL du serveur ? Code First à partir d'axis ou de CXF ou bien contract first et les classe en suite ?
    Si c'est code first on peut supposé que ce WSDL n'est pas top et ne marchera convenablement qu'avec axis.
    Sinon la génération du proxy faite CXF est-elle vraiment gênante ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Par défaut
    Le WSDL a été généré code first avec WebMethods...

    Et ce qui est gênant avec ce que génère CXF, c'est que le nom des classes est à rallonge car il y a au moins une quinzaine de niveau du genre :
    Root.Structure.SousStructure.Niveau1.Niveau2.Niveau3....etc

    Et l'autre chose gênante est que CXF me génère des JaxBElement<> à certains endroits, a priori pour les elements qui sont nillable=true et minOccurs=0 et je comprends pas trop pourquoi...

    Ce que génère CXF est quand même cohérent avec le wsdl car les complexType ne sont pas nommés et ils sont déclarés directement sous les éléments (qui ne sont du coup pas typés).

    Je me demandais s'il était possible de contourner ce problème en utilisant des bindings mais je ne trouve pas...

  4. #4
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Je crois qu'il est possible de récupérer un jar des classes utilisé par le webservice provenant du serveur et de les utiliser directement sans faire un génération de code pour les classes entité... enfin j'ai rien trouvé sur le sujet.
    Moi le bindings je l'ai toujours utilisé du côté serveur pour faire du code first mais contrôler le WSDL induit par le code et ça marche moyen, y a toujours un attribut que j'arrivais pas à ajouter, bref c'est pas top.

Discussions similaires

  1. Classes Anonymes, Method-Local inner Classes.
    Par jhaythem dans le forum Langage
    Réponses: 9
    Dernier message: 08/08/2007, 16h44
  2. requete hql sur association one to many avec inner class
    Par austin P. dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/06/2007, 11h56
  3. inner class and static way
    Par vince_grenoblois dans le forum Langage
    Réponses: 1
    Dernier message: 11/08/2006, 15h52
  4. Inner Class ou lisibilité
    Par Emplyst dans le forum Langage
    Réponses: 4
    Dernier message: 17/07/2006, 21h06
  5. Es ce possible de faire des inner class en C++?
    Par Eithelgul dans le forum C++
    Réponses: 5
    Dernier message: 14/02/2005, 14h27

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