3 votes

(WS)Génération de stubs - le trait de soulignement n'est pas autorisé ?

J'ai essayé de générer des Stubs à partir de cette WSDL (ce n'est pas mon webservice donc je ne peux pas changer les noms !)

Le problème est que je ne peux pas générer les stubs avec succès parce que dans le wsdl il y a des noms de service qui diffèrent seulement en ce qu'un service avec "_" commence et l'autre pas. Exemple : _registerTest et registerTest

Quelqu'un sait comment réparer ça ? Est-il possible de générer les stubs avec Jaxb ?

J'ai essayé avec maven :

<plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.7.1</version>
            <executions>
                <execution>
                    <id>ws-source-gen-phase1</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <removeOldOutput>true</removeOldOutput>
                        <extension>true</extension>
                        <schemaDirectory>src/main/resources/</schemaDirectory>
                        <args>
                            <arg>-wsdl</arg>
                            <schemaFiles>src/main/resources/onyxexamservices.wsdl</schemaFiles>
                            <!-- <arg>-XautoNameResolution</arg>  -->
                        </args>
                        <generatePackage>com.onyx.player.ws</generatePackage>
                        <generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Et avec wsimport :

wsimport onyxexamservices.wsdl

parsing WSDL...

Generating code...

Compiling code...

/Users/blub/Downloads/./de/bps/plugin/webservice/server/OnyxExamService.java:89: error: 
method registerTest(long,String,byte[],Mapwrapper) is already defined in interface 
OnyxExamService
public long registerTest(
            ^
/Users/blub/Downloads/./de/bps/plugin/webservice/server/OnyxExamService.java:114: error:  
method registerStudent(long,long,byte[],Mapwrapper) is already defined in interface    
OnyxExamService
public long registerStudent(
            ^
/Users/blub/Downloads/./de/bps/plugin/webservice/server/OnyxExamService.java:165: error:  
method testControl(long,StudentIdsWrapper,int,Mapwrapper) is already defined in interface 
OnyxExamService
public long testControl(
            ^
/Users/blub/Downloads/./de/bps/plugin/webservice/server/OnyxExamService.java:210: error: 
method deregisterTest(long,String,Mapwrapper) is already defined in interface 
OnyxExamService
public long deregisterTest(
            ^
4 errors
compilation failed, errors should have been reported

3voto

Bogdan Points 7227

Je pense que les underscores sont enlevés afin de générer des noms qui respectent le format Conventions de code Java (des noms comme foo_bar sont générés comme fooBar dans la source).

Si vous voulez préserver le nom, vous pouvez appliquer des personnalisations .

En supposant que j'ai les fichiers sur lesquels je travaille dans c:\temp\src et je génère des sources dans c:\temp\dest Je peux le faire (sur une ligne) :

wsimport 
         -keep 
         -d c:\temp\dest 
         -b c:\temp\src\fix.xml 
c:\temp\src\onyxexamservices.wsdl

donde fix.xml est mon fichier de personnalisation :

<jaxws:bindings wsdlLocation="C:\temp\src\onyxexamservices.wsdl"
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='OnyxExamService']/wsdl:operation[@name='_registerStudent']">
        <jaxws:method name="_registerStudent" />
    </jaxws:bindings>
    <jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='OnyxExamService']/wsdl:operation[@name='_registerTest']">
        <jaxws:method name="_registerTest" />
    </jaxws:bindings>
    <jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='OnyxExamService']/wsdl:operation[@name='_testControl']">
        <jaxws:method name="_testControl" />
    </jaxws:bindings>
    <jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='OnyxExamService']/wsdl:operation[@name='_deregisterTest']">
        <jaxws:method name="_deregisterTest" />
    </jaxws:bindings>
</jaxws:bindings>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X