0

我在 GWT 应用程序中使用 CXF JAXB 生成的类。我希望将 equals() 和 hashCode() 添加到生成的类中。我已经成功地在 maven POM 中使用了 JAXB2 Basics Plugins ( http://confluence.highsource.org/display/J2B/JAXB2+Basics+Plugins ) 和带有 CXF 的 JAXB2 Basics Runtime 来生成它们。但是,生成的类现在与 GWT 不兼容。这些类具有 GWT 无法模拟的依赖关系,例如 java.util.ResourceBundle、java.net.URL。

我正在考虑使用 CustomEqualsStrategy 但这仍然会留下 org.jvnet.jaxb2_commons.locator.ObjectLocator 类。有没有人让这个工作?

4

1 回答 1

1

这个问题现在有了答案。

我与 James(OP,@ja6a)合作,我们一起开发了JAXB2 SimpleEquals PluginJAXB2 SimpleHashCode Plugin,它们生成无运行时无 反射 equals(...)hashCode()方法。由于没有额外的运行时依赖,这与 GWT 兼容。

生成的代码示例:

用法:

下面是一个示例的片段pom.xml

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <configuration>
                <extension>true</extension>
                <args>
                    <arg>-XsimpleEquals</arg>
                    <arg>-XsimpleHashCode</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                    </plugin>
                </plugins>
            </configuration>
        </plugin>

如上所述,不需要运行时。

这些插件处理大量案例和角落案例以及角落案例。例如,我们必须对JAXBElements 和数组之类的东西进行特殊处理,因为它们没有实现hashCode()equals(...)方法。插件还处理原始类型。

非常感谢James Annesley的帮助。

于 2014-12-19T14:48:37.313 回答