Не може да се изпълни wsdl2java с maven

Искам да изпълня wsdl2java с maven, но имам следната грешка при изграждане:

    [INFO] --- maven-dependency-plugin:2.1:copy (default) @ mogopay ---
[INFO] Configured Artifact: javax.xml.bind:jaxb-api:2.2:jar
[INFO] Configured Artifact: javax.xml.ws:jaxws-api:2.2:jar
[INFO] Copying jaxb-api-2.2.jar to c:\Users\EBIZNEXT\git\mogopay-core\mogopay\target\endorsed\jaxb-api-2.2.jar
[INFO] Copying jaxws-api-2.2.jar to c:\Users\EBIZNEXT\git\mogopay-core\mogopay\target\endorsed\jaxws-api-2.2.jar
[INFO]
[INFO] --- maven-antrun-plugin:1.3:run (copy-tomcat-resources) @ mogopay ---
[INFO] Executing tasks
[INFO] Executed tasks
[INFO]
[INFO] --- cxf-codegen-plugin:2.4.2:wsdl2java (CXF Payline) @ mogopay ---
[INFO] Running wsdl2java in fork mode...
[INFO] Building jar: C:\Users\EBIZNEXT\AppData\Local\Temp\cxf-tmp-679212\cxf-codegen5225275003143491559.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:30.351s
[INFO] Finished at: Tue Jan 22 18:28:57 CET 2013
[INFO] Final Memory: 14M/178M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.cxf:cxf-codegen-plugin:2.4.2:wsdl2java (CXF Payline) on project mogopay:
[ERROR] Exit code: 1 - Exception in thread "main" org.apache.cxf.tools.common.ToolException: java.lang.reflect.UndeclaredThrowableException
[ERROR] at
   ...
[ERROR] Caused by: java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required()
[ERROR] at java.lang.Class.getDeclaredMethod(Class.java:1954)
[ERROR] at com.sun.codemodel.TypedAnnotationWriter.invoke(TypedAnnotationWriter.java:107)
[ERROR] ... 27 more
[ERROR]
[ERROR] Command line was: "c:\Program Files\Java\jdk1.7.0\jre\bin\java.exe" -Djava.endorsed.dirs=c:\Users\EBIZNEXT\git\mogopay-core\mogopay\target/endorsed -jar
 C:\Users\EBIZNEXT\AppData\Local\Temp\cxf-tmp-679212\cxf-codegen5225275003143491559.jar C:\Users\EBIZNEXT\AppData\Local\Temp\cxf-tmp-679212\cxf-w2j3628405823287
641812args

Този проект е изграден в grails 2.0.3. Изглежда, че проблемът идва от Jaxb, защото текущата версия в grails използва jaxb-api-2.1, докато проектът се нуждае от jaxb 2.2. Актуализирах своя pom, както беше предложено от този отговор: Задайте ниво на съответствие на Java в CXF wsdl2java и също тук: Пример 7 - Използване на JAXB/JAX-WS 2.2 с Java 6. Но когато изпълня командата maven: mvn clean install, получавам грешката по-горе.

Ето моя pom (премахнах маловажните части):

<pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArguments>
                        <endorseddirs>${project.build.directory}/endorsed</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <forkMode>once</forkMode>
                    <argLine>-Djava.endorsed.dirs=${project.build.directory}/endorsed</argLine>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

         <plugins>
             ...
             <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax.xml.bind</groupId>
                                <artifactId>jaxb-api</artifactId>
                                <version>2.2</version>
                            </artifactItem>
                            <artifactItem>
                                <groupId>javax.xml.ws</groupId>
                                <artifactId>jaxws-api</artifactId>
                                <version>2.2</version>
                            </artifactItem>
                        </artifactItems>
                        <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin> 
                ...
               <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
                <fork>once</fork>
                <additionalJvmArgs>-Djava.endorsed.dirs=${project.build.directory}/endorsed</additionalJvmArgs>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>xerces</groupId>
                    <artifactId>xercesImpl</artifactId>
                    <version>2.8.1</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                    <version>2.2</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-xjc</artifactId>
                    <version>2.2</version>
                </dependency>
            </dependencies>
            <executions>
                <execution>
                    <id>CXF Payline</id>
                    <phase>process-resources</phase>
                    <configuration>
                        <sourceRoot>${basedir}/src/java</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/java/wsdl/Payline_DirectPaymentAPI.wsdl</wsdl>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>                
         </plugins>

Всяко предложение ще бъде оценено


person Dimitri    schedule 22.01.2013    source източник


Отговори (1)


Java 7 вече включва jaxb 2.2 (всъщност 2.2.4-1, както можете да видите тук), така че не е необходимо да добавяте никаква зависимост към този артефакт. Ако този артефакт е в конфликт със зависимостите на grails 2.0.3, опитайте да изключите jaxb от зависимостта на grails, може би grails е доволен от jaxb 2.2.

Това трябва да е коментар, но стартирах прокси, който филтрира javascript и не мога да използвам функцията за коментари. Съжалявам за моя английски!

person Pablo Lascano    schedule 23.01.2013