java - 将 xjc 的 -enableIntrospection 与 jaxws-maven-plugin 一起使用

标签 java jaxb maven jax-ws

遇到http://java.net/jira/browse/JAXB-131 ,我们正在尝试采用其注释中提供的解决方法,即在 xjc 的命令行上提供 -enableIntrospection。

但是,当我这样做时:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>1.12</version>
            <executions>
                <execution>
                    <id>allservice</id>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <xjcArgs><xjcArg>-enableIntrospection</xjcArg></xjcArgs>
                        <extension>true</extension>
                        <wsdlDirectory>src/main/webapp/WEB-INF/wsdl</wsdlDirectory>
                        <bindingDirectory>src/main/resources/bindings</bindingDirectory>
                        <target>2.0</target>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>javax.jws</groupId>
                    <artifactId>jsr181-api</artifactId>
                    <version>1.0</version>
                </dependency>
            </dependencies>
        </plugin>

maven 构建失败并显示:

[DEBUG] The binding Directory is C:\Source\workspace\TheProject\src\main\resources\bindings
[DEBUG] jaxws:wsimport args: [-s, C:\Source\workspace\TheProject\target\jaxws\wsimport\java, -d, C:\Source\workspace\TheProject\target\classes, -target, 2.0, -extension, -Xnocompile, -B-enableIntrospection, -b, C:\Source\workspace\TheProject\src\main\resources\bindings\servicebindings.xml]
[INFO] jaxws:wsimport args: [-s, C:\Source\workspace\TheProject\target\jaxws\wsimport\java, -d, C:\Source\workspace\TheProject\target\classes, -target, 2.0, -extension, -Xnocompile, -B-enableIntrospection, -b, C:\Source\workspace\TheProject\src\main\resources\bindings\servicebindings.xml, C:\Source\workspace\TheProject\src\main\webapp\WEB-INF\wsdl\CaseService.wsdl]
no such JAXB option: -enableIntrospection

如何将 xjc 的 -enableIntrospection 与 jaxws-maven-plugin 一起使用?如果我不能,有哪些替代方案可以自定义 jaxws 的代码生成,以便将 Boolean 属性的 getter 称为 getFoo() (正确)而不是 isFoo ()(这违反了 Java Beans 规范)。

最佳答案

将 boolean 值的 getter 添加到 JAX-WS 生成的 Artifact 中,而不是使用 enableIntrospection 选项和 Java 认可的覆盖机制。

仅 JAX-WS RI 2.1.13 支持选项enableIntrospection。但 JavaSE6 1.6.0_65 附带 JAVA-WS RI 2.1.6。解决此问题的一种方法是使用 Java 认可的覆盖机制,将 jaxws-api.jar 和 jaxb-api.jar 复制到 JRE/JDK 认可的目录中。

另一种方法是不使用enableIntrospection 选项,而是将 boolean 值的getter 添加到JAX-WS 生成的 Artifact 中。这些 getter 可以使用 Replacer maven 插件添加。

Maven 替换插件添加 get 方法:

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.2</version>
    <executions>
        <execution>
            <phase>process-resources</phase>
            <goals>
                <goal>replace</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <basedir>${project.basedir}</basedir>
        <includes>
            <include>src/main/java/lu/etat/cie/rn/rpp/ws/**/*.java</include>
        </includes>
        <token>public Boolean is(.*)\(\)(\s*\{\s*.+\s*\})</token>
        <value>public Boolean is$1\(\)$2
    public Boolean get$1\(\)$2</value>
    </configuration>
</plugin>

替换:

public Boolean isProperty() {
    return property;
}

与:

public Boolean isProperty() {
    return property;
}
public Boolean getProperty() {
    return property;
}

关于java - 将 xjc 的 -enableIntrospection 与 jaxws-maven-plugin 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586927/

相关文章:

java - 包含映射或简单类型的 JAXB 对象

IntelliJ IDEA 中的 Maven 和 JavaFX 项目

java - 如何提高 Android 低功耗蓝牙 GATT 吞吐量?

java - 使用 jaxb 外部绑定(bind)自定义时出错

java - 基本身份验证请求应该是 POST 还是 GET?

web-services - 首次调用 JAX-WS Web 服务太慢

maven nexus 下载中央远程索引错误

java - Surefire-plugin 执行测试用例的顺序是什么?

java - 如何找到两个日期之间的天数?

java - eclipse 锁定 jar 文件