3

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

当我尝试添加自己的 package-info.java 时,出现错误:“类型 package-ingo 已定义”。

有没有办法将我的注释注入到 package-info.java?也许还有其他想法?

谢谢

4

4 回答 4

5

经过一些研究,我使用了外部映射文件。对于所有与我有类似问题的人,我已经在下面描述了我的发现。

如果您使用“cxf-codegen-plugin”从 WSDL 生成源代码,则不能使用带有 package-info.java 的解决方案。这是因为生成的代码可能已经包含该文件。您也不能将注释添加到您的类,因为它是生成的。唯一的解决方案是提供您自己的映射器。

首先,您必须编写自定义映射器。之后,您应该定义 xjb 映射文件,最后将附加配置添加到您的 pom.xml。您可以在此处阅读有关前两个步骤的信息。

要将外部映射文件添加到 cxf-codegen-plugin,您必须在插件定义中的配置节点中添加如下内容:

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

请注意,您不应该将额外的参数传递给 xjc,因为它不起作用。

希望这对任何人都有帮助:)

于 2012-12-06T12:11:23.043 回答
2

我从未尝试过,但您可以尝试在 wsdl2java 命令中添加 -xjc-npa 标志。从理论上讲,这告诉 XJC 不要生成 package-info.java 而是将所有名称空间等粘贴到需要它的所有其他元素上。

于 2012-10-15T14:23:49.303 回答
0

我还需要为生成的代码添加注释。在生成 java 类之后,我使用了 maven-replacer-plugin 来执行此操作。您可以使用此解决方案来修改任何出现的文件。

这是相关的 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>

希望这可以帮助!

于 2013-11-01T14:10:43.797 回答
0

您可以提供 JAXB“绑定”,既可以内嵌在 WSDL 中,也可以作为单独的外部绑定文件提供,JAXB 将生成适当的适配器和所需的包级注释。有关示例,请参见此问题。

于 2012-10-15T12:07:51.840 回答