如何在客户端为 GWT 使用 JAXB 注释?

Posted

技术标签:

【中文标题】如何在客户端为 GWT 使用 JAXB 注释?【英文标题】:How to use JAXB annotations in the client side for GWT? 【发布时间】: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

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

【问题讨论】:

【参考方案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】:

您是否已经检查过这些讨论:

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/849c6cc6c9b1467a/cab6b973bbf7d162?hl=en&lnk=gst&q=jaxb+annotations#cab6b973bbf7d162

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/6312cedd281b91a9/b1add5932c842ace?hl=en&lnk=gst&q=jaxb+annotations#b1add5932c842ace

【讨论】:

【参考方案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>

【讨论】:

以上是关于如何在客户端为 GWT 使用 JAXB 注释?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GWT 在客户端处理图像/gif 类型响应

GWT(客户端)=如何将对象转换为 JSON 并发送到服务器?

Gwt-rpc 仅使用 DAO。摆脱 DTO

如何在 GWT 中使用 autobean 将 json 转换为 java 类

GWT - Hibernate:如何将 MySQL 的结果显示到 GWT 客户端

如何使用 jprofiler 分析 gwt 客户端应用程序?