注释CXF(WSDL2Java的)生成的包(Annotating CXF (wsdl2java) g

2019-09-24 03:11发布

我需要添加包级别的注释(XmlJavaTypeAdapters类型的适配器)。 问题是,当我运行的WSDL2Java它产生package-info.java文件为包。

当我尝试添加自己的package-info.java我得到错误:“该型包INGO已定义”。

有没有一种方法来注入我的注释package-info.java? 也许任何其他的想法?

谢谢

Answer 1:

经过一番研究,我所使用的外部映射文件。 对于所有有类似的问题来挖掘我在下面我所发现的描述。

如果您使用的是“CxF-CODEGEN-插件”从WSDL生成源代码,你将无法使用package-info.java解决方案。 这是因为生成的代码propably已经包含这个文件。 因为它产生你也不能添加注释到您的类。 唯一的办法是提供自己的映射。

首先你必须编写自定义的映射。 之后,你应该定义XJB映射文件最后加上额外的配置,以你的pom.xml。 你可以阅读前两步这里 。

外部映射文件添加到您要添加的东西像这样配置节点在插件定义CXF-CODEGEN-插件:

<defaultOptions>
    <bindingFiles>
        <bindingFile>${basedir}/src/main/resources/mapping.xjb</bindingFile>
    </bindingFiles>
    <noAddressBinding>true</noAddressBinding>
</defaultOptions>

请注意,你不应该将额外的参数作为描述XJC 在这里 ,因为它不会工作。

希望这将帮助任何人:)



Answer 2:

我从来没有尝试过这一点,但你可以尝试添加-xjc-NPA标志中的WSDL2Java命令。 从理论上讲,它告诉XJC不生成package-info.java,而是贴在需要的地方的所有其他元素的所有命名空间和这样的。



Answer 3:

可以在WSDL或作为一个单独的外部绑定文件提供JAXB“绑定”,无论是内联的,和JAXB将产生适当的适配器和所需的程序包级别注释。 见这个问题的一个例子。



Answer 4:

我需要添加注释,以生成代码。 我使用的Maven的替代品 - 插件来做到这一点生成的Java类之后。 您可以使用此解决方案来修改出来的任何文件。

下面是相关的pom.xml位:

        <plugin>
            <groupId>com.google.code.maven-replacer-plugin</groupId>
            <artifactId>replacer</artifactId>
            <version>${replacer.plugin.version}</version>
            <executions>
                <execution>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <filesToInclude>target/generated-sources/cxf/com/BLAH/client/api/v4/*.java</filesToInclude>
                <filesToExclude>target/generated-sources/cxf/com/BLAH/client/api/v4/ObjectFactory.java,
                    target/generated-sources/cxf/com/BLAH/client/api/v4/package-info.java,
                </filesToExclude>
                <replacements>
                    <replacement>
                        <!-- Add @XmlRootElement in front of public class Blah -->
                        <token>public class (\w*)</token>
                        <value>@XmlRootElement(name ="$1") ${line.separator}public class $1</value>
                    </replacement>
                    <replacement>
                        <!-- Add the import for the XmlRootElement annotation to the file -->
                        <token>import javax.xml.bind.annotation.XmlType;</token>
                        <value>import javax.xml.bind.annotation.XmlType;${line.separator}import javax.xml.bind.annotation.XmlRootElement;</value>
                    </replacement>
                </replacements>
            </configuration>
        </plugin>

希望这可以帮助!



文章来源: Annotating CXF (wsdl2java) generated package