【问题标题】:How to use JAXB annotations in the client side for GWT?如何在客户端为 GWT 使用 JAXB 注释?
【发布时间】:2010-07-08 13:08:27
【问题描述】:

我想像这样在我的班级中使用 JaxB 注释:

@XmlRootElement
public class ItemExtension implements Serializable {

但是当我把它放在客户端时,GWT 会报错。

 [ERROR] Line 4: The import javax.xml.bind cannot be resolved
         [ERROR] Line 14: XmlRootElement cannot be resolved to a type

有解决方法还是我做错了什么?

【问题讨论】:

    标签: java gwt annotations jaxb


    【解决方案1】:

    我有一个项目在客户端 GWT 代码中使用带有 JPA 和 JAXB 注释的实体类。请参阅GWT Documentation 中的“用另一个包实现覆盖一个包实现”部分。

    假设您的模块在包com.example.app 中。您需要在新包中重新创建[1] 所有 JAXB 注释类,特别是 com.example.app.jre.java.xml.bind.annotation;在您的模块 XML 文件中,然后添加 <super-source path="jre" /> 即可。

    请注意,您不需要分发该包中的类文件,它们仅用于 GWT 编译器。

    [1]:您可以复制它们并调整所有包引用。

    【讨论】:

    • 如果我只是移动 javax.xml.bind.annotation.* 我在编译时会出错。一个例子 - DOMHandler - No source code is available for type javax.xml.transform.Result。我错过了什么吗?
    • 您需要从源代码中引用的所有类/接口/注释的完整源代码。同时复制javax.xml.transform.Result的源代码。
    • 谢谢 - 我从 javax.xml.bind 复制了所有内容,但需要将其限制为我的依赖项。您是在使用它来解析 xml 还是其他东西?我正在尝试解析 XML,如果我解组服务器端(序列化 jaxb 类的困难)或客户端(进一步的依赖问题),我会遇到依赖问题。
    • JAXB 与 GWT 环境的匹配差得惊人;我会认真建议找到其他方法来进行(反)序列化。我的用例是在 GWT 客户端中重用我自己的域类,我需要一种方法让编译器忽略特定于 JAXB 的注释。域对象通过正常的 GWT RPC/序列化机制传输到客户端
    • 感谢 Tassos - 我开始考虑放弃 JAXB,但这篇文章(以及其他一两篇文章)给了我一线希望,但我看到你有一个完全不同的用例。感谢您的帮助,我会尝试其他方法:)
    【解决方案2】:
    【解决方案3】:

    我已经使用这个库在 GWT 客户端中进行 jaxb 解析

    http://code.google.com/p/gwtjaxb/

    它不是一个完整的 JAXB 生成器,但它涵盖了我需要的一切。

    【讨论】:

      【解决方案4】:

      您可能会在这里找到可行的解决方案:GWT with JPA

      【讨论】:

        【解决方案5】:

        我能够通过从 GWT 模块 XML 的源中排除生成的 JAXB ObjectFactory 来解决我的 GWT 编译器问题:

        <source path="model">
            <exclude name="**/ObjectFactory.*" />
        </source>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-30
          • 2010-10-25
          • 1970-01-01
          相关资源
          最近更新 更多