如何在客户端为 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(客户端)=如何将对象转换为 JSON 并发送到服务器?
如何在 GWT 中使用 autobean 将 json 转换为 java 类