11

jaxws maven プラグインを使用して Web サービス クライアントのソースを生成しようとしていますが、次の例外が発生します。

    [ERROR] Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsimport (default) on project cf-wsjavaclient: Error executing: wsimpor
t [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnectorpoc\cf-wsjavaclient\target, -Xnocompile, http://localhost:9090/axis2/services/OFSC
onnectorServiceWS?wsdl]: UndeclaredThrowableException: javax.xml.bind.annotation.XmlElementRef.required() -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.jvnet.jax-ws-commons:jaxws-maven-plugin:2.2:wsimport (default) on p
roject cf-wsjavaclient: Error executing: wsimport [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnectorpoc\cf-wsjavaclient\target, -Xnoco
mpile, http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl]
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        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.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error executing: wsimport [-keep, -s, C:\Users\sjunejo\Documents\GitHub\sandbox-ofsconnecto
rpoc\cf-wsjavaclient\target, -Xnocompile, http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl]
        at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.wsImport(WsImportMojo.java:360)
        at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.processWsdlViaUrls(WsImportMojo.java:342)
        at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.execute(WsImportMojo.java:283)
        at org.jvnet.jax_ws_commons.jaxws.MainWsImportMojo.execute(MainWsImportMojo.java:30)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 19 more
Caused by: java.lang.reflect.UndeclaredThrowableException
        at $Proxy44.required(Unknown Source)
        at com.sun.tools.xjc.generator.bean.field.AbstractField.annotateReference(AbstractField.java:192)
        at com.sun.tools.xjc.generator.bean.field.AbstractField.annotate(AbstractField.java:161)
        at com.sun.tools.xjc.generator.bean.field.AbstractFieldWithVar.createField(AbstractFieldWithVar.java:80)
        at com.sun.tools.xjc.generator.bean.field.SingleField.<init>(SingleField.java:94)
        at com.sun.tools.xjc.generator.bean.field.SingleField.<init>(SingleField.java:81)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.sun.tools.xjc.generator.bean.field.GenericFieldRenderer.generate(GenericFieldRenderer.java:69)
        at com.sun.tools.xjc.generator.bean.field.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:82)
        at com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:774)
        at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:555)
        at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:258)
        at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:166)
        at com.sun.tools.xjc.model.Model.generateCode(Model.java:290)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:283)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:94)
        at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:142)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2244)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:191)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:137)
        at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:381)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:198)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:179)
        at com.sun.tools.ws.WsImport.doMain(WsImport.java:74)
        at org.jvnet.jax_ws_commons.jaxws.WsImportMojo.wsImport(WsImportMojo.java:357)
        ... 24 more
Caused by: java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required()
        at java.lang.Class.getDeclaredMethod(Class.java:1937)
        at com.sun.codemodel.TypedAnnotationWriter.invoke(TypedAnnotationWriter.java:112)
        ... 52 more

プロジェクトのビルドに使用しているPOMは次のとおりです。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xxxxx</groupId>
    <artifactId>cf-wsjavaclient</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cf-wsjavaclient</name>
    <properties>
        <wsdlLoc>http://localhost:9090/axis2/services/OFSConnectorServiceWS?wsdl</wsdlLoc>
        <skipTests>true</skipTests>
    </properties>
    <build>
        <plugins>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.6</version>
            <!-- Disable tests for now, until we have client jar built then we can run as follows;
                To run the tests:
                $ mvn verfiy -DskipTests=false
            -->             
            <configuration>
                <skipTests>${skipTests}</skipTests>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <wsdlUrls>
                        <wsdlUrl>${wsdlLoc}</wsdlUrl>
                    </wsdlUrls>
                    <sourceDestDir>${basedir}/target</sourceDestDir>
                </configuration>
            </plugin>
             <!-- Don't forget to use endorsed with JAX-WS 2.2 on Java 6 !! -->
                <!-- plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <endorseddirs>${basedir}/endorsed</endorseddirs>
                        </compilerArguments>
                    </configuration>
                </plugin-->
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.2.6</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

情報を見つけようとしましたが、利用できるものはありません。助けてください。

ありがとう

--

シュネホ

4

2 に答える 2

14

最近同じエラーが発生しました。wsimportがjaxbの2.1および2.2バージョンを台無しにする
ために発生するようです。

次のように、プロジェクトpom.xml<target>2.1</target>を編集し、インポートされた各 wsdl の構成にタグを追加することで、Web サービス ソースを正しく生成することができました。

<execution>
    <goals>
        <goal>wsimport</goal>
    </goals>
    <configuration>
        <wsdlFiles>
            <wsdlFile>path/to/file.wsdl</wsdlFile>
        </wsdlFiles>
        <wsdlLocation>http://path/to/webservice?wsdl</wsdlLocation>
        <staleFile>path/to/file.stale</staleFile>
        <target>2.1</target>
    </configuration>
    <id>wsimport-generate-WebServiceName</id>
    <phase>generate-sources</phase>
</execution>

この問題を抱えている人に役立つことを願っています。

于 2013-02-21T13:09:19.133 に答える
5

あなたの問題に基づいて、Java 6で実行していると思いますか? Java 6 には古いバージョンの JAX-WS が含まれているため、Java 6 で JAX-WS 2.2 を生成、コンパイル、および実行する場合は、含まれている API をオーバーライドする必要があります。Tex Killer が上で述べているように、wsimport に生成するように指示するだけです。 JAX-WS 2.1 オブジェクトとすべてが正常に動作するはずです (2.0 ではなく JAX-WS 2.1 を含む Java 6 JRE の 1 つを持っていると仮定します)。ただし、具体的に 2.2 用に生成したい場合は、POM を次のように設定することでこれを行うことができました (簡潔にするためにbuild要素だけを含めました)。

<build>
    <plugins>
        <!-- Generate client using WSDL -->
        <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <target>2.2</target>
                        <verbose>true</verbose>
                        <wsdlUrls>
                            <wsdlUrl>http://localhost:8080/axis2/services/HelloWorld?wsdl</wsdlUrl>
                        </wsdlUrls>
                        <packageName>my.package.name</packageName>
                    </configuration>
                </execution>
            </executions>


            <!-- if you want to use a specific version of JAX-WS, you can do so like 
                this -->
            <dependencies>
                <dependency>
                    <groupId>com.sun.xml.ws</groupId>
                    <artifactId>jaxws-tools</artifactId>
                    <version>2.2.7</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.jvnet.staxex</groupId>
                            <artifactId>stax-ex</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.jvnet.staxex</groupId>
                    <artifactId>stax-ex</artifactId>
                    <version>1.7</version>
                    <exclusions>
                        <exclusion>
                            <groupId>javax.xml.stream</groupId>
                            <artifactId>stax-api</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>

        <!-- Don't forget to use endorsed with JAX-WS 2.2 on Java 6 !! -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax.xml.bind</groupId>
                                <artifactId>jaxb-api</artifactId>
                                <version>2.2.4</version>
                                <type>jar</type>
                            </artifactItem>
                            <artifactItem>
                                <groupId>javax.xml.ws</groupId>
                                <artifactId>jaxws-api</artifactId>
                                <version>2.2.8</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArguments>
                    <endorseddirs>${project.build.directory}/endorsed</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
    </plugins>
</build>

これを機能させるには、POM に 3 つの変更を加える必要があると思います。ここから取得した 3 つすべて: http://jax-ws-commons.java.net/jaxws-maven-plugin/usage.html。最初に、上記のように jaxws プラグインに追加の依存関係を追加する必要がある場合があります。また、maven-compiler-plugin のコメントを解除する必要があることに注意してください。ただし、承認されたディレクトリが適切に設定されているようです。3 番目に、maven-dependency-plugin の定義を追加する必要があります。必要に応じて、JAXB および JAX-WS API のバージョンを変更する必要がある場合があります。

これらに加えて、JAXB および JAX-WS API (POM で定義されているものと同じもの) の jar を <java-home>/lib/endorsed の下に配置することにより、承認されたライブラリで Maven を起動する JRE を更新する必要がありました。 . 最後に、更新したばかりの JRE によって Maven ビルドが起動されていることを確認します。それでも機能しない場合は、Maven ビルドの Eclipse 実行構成を調べて、承認されたライブラリで JRE を使用していることを確認してください。(私の場合、実行構成はプロジェクト構成とは異なる JRE を使用していました。プロジェクト JRE を更新しましたが、実行構成で使用されているものは更新していませんでした。なぜまだ更新されていないのかを理解するのに約 1 日かかりました。働く)。

それはあなたのためにトリックをするはずです。JREインストールを変更したくない場合は、実行構成を更新して、外部の承認済みライブラリを直接参照することができます。

乾杯

于 2013-02-27T00:00:59.147 に答える