【问题标题】:Set Java Compliance Level in CXF wsdl2java在 CXF wsdl2java 中设置 Java 合规级别
【发布时间】:2011-08-05 00:02:11
【问题描述】:

我是 CXF 的新手,正在尝试从 WSDL 创建一个客户端。我过去使用过 Metro 和 Axis。我下载了 apache-cxf-2.3.3 并使用 wsdl2java 生成客户端存根。我使用 Maven 并用它来设置我的 pom:

<properties>
    <cxf.version>2.3.3</cxf.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <optimize>true</optimize>
                <debug>true</debug>
            </configuration>
        </plugin>
    </plugins>
</build>

当我构建项目时,出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure:
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol
[ERROR] symbol  : method required()

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol
[ERROR] symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
[ERROR] location: class javax.xml.ws.Service

问题似乎与生成的代码使用 Java 6 功能(XmlElementRef 的“require”元素,Service 的新构造函数)但 CXF Maven 依赖项适用于 Java 5 的事实有关。

有没有办法指定生成的代码应符合 Java 5 标准?

【问题讨论】:

    标签: java cxf wsdl2java


    【解决方案1】:

    实际上,CXF 的 wsdl2java 命令行工具的代码与 Java 5 兼容,但很可能与 Java 6 不兼容。原因是它生成的代码符合 JAX-WS 2.2 和 JAXB 2.2。但是,Java 6 中包含的这些 API 的版本只有 2.1。

    有几个选项:

    1) 最简单的方法是在 wsdl2java 命令中添加“-fe jaxws21”,使其生成符合 jaxws 2.1 的代码而不是 2.2

    2) 将 2.2 api jar 添加到你的 JDK 的 endorsed 目录中

    3) 在 maven 中配置编译器插件以“认可”2.2 jars

    【讨论】:

    • 感谢您对兼容性和使用 -fe 选项的说明。 cxf.apache.org/docs/wsdl-to-java.html 上的描述没有解释清楚,可以指定使用哪个 jax-ws 版本。
    • 为 JDK8 设置哪个版本的前端?目前在我的旧项目中设置了 jaxws21 但它看起来已经过时了
    【解决方案2】:

    wsdl2java documentation 没有提及任何用于指定 Java 版本的选项。

    您可以尝试使用 Maven cxf-codegen-plugin 生成客户端存根,它应该尊重 Maven 编译器的源版本和目标版本。

    如果这不起作用,您可以通过更改 pom 中的源和目标行来配置 Maven 以使用 Java 6,如下所示:

                   <source>1.6</source>
                   <target>1.6</target>
    

    【讨论】:

    • 我不认为 Glassfish 有 wsdl2java 的版本。我在生成 Metro 客户端时使用了 wsimport。 Axis 有一个 wsdl2java,但我目前没有安装它。使用 cxf-codegen-plugin 创建相同的 Java 6 代码。
    • 对不起,你是对的。 Metro 版本是 wsimport
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2012-12-24
    相关资源
    最近更新 更多