我需要添加包级别注释(XmlJavaTypeAdapters 类型适配器)。问题是当我运行 wsdl2java 时,它会为该包生成 package-info.java 文件。
当我尝试添加自己的 package-info.java 时,出现错误:“类型 package-ingo 已定义”。
有没有办法将我的注释注入到 package-info.java?也许还有其他想法?
谢谢
经过一些研究,我使用了外部映射文件。对于所有与我有类似问题的人,我已经在下面描述了我的发现。
如果您使用“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,因为它不起作用。
希望这对任何人都有帮助:)
我从未尝试过,但您可以尝试在 wsdl2java 命令中添加 -xjc-npa 标志。从理论上讲,这告诉 XJC 不要生成 package-info.java 而是将所有名称空间等粘贴到需要它的所有其他元素上。
我还需要为生成的代码添加注释。在生成 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>
希望这可以帮助!
您可以提供 JAXB“绑定”,既可以内嵌在 WSDL 中,也可以作为单独的外部绑定文件提供,JAXB 将生成适当的适配器和所需的包级注释。有关示例,请参见此问题。