【问题标题】:GWT 3rd Party Library Problem : Code IncludedGWT 3rd 方库问题:包含代码
【发布时间】:2009-12-17 12:51:35
【问题描述】:

我正在使用 Eclipse 版本:3.5.1、GWT 2.0.0、GAE 1.3.0,并且我正在尝试使用 XStream 1.3.2 在客户端和服务器端之间的 xml 中“序列化”我的 Java 对象GWT。

在服务器端,XStream 可以正常工作。

在客户端,编译器抱怨它找不到所使用的 XStream 类的源代码。我知道这是某种“引用”问题,其中 GWT 客户端类无法自动找到服务器类,我理解为什么会这样,但是当我尝试使用各种文章和教程中描述的方法时,我会慢慢发疯在 GWT 中使用 3rd 方库。

它们都不起作用!

我的gwt.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.1/distro-source/core/src/gwt-module.dtd">  
<module rename-to='bandmates'>  
    <!-- Inherit the core Web Toolkit stuff.                        -->
    <inherits name='com.google.gwt.user.User' />

    <!-- Inherit the default GWT style sheet.  You can change       -->
    <!-- the theme of your GWT application by uncommenting          -->
    <!-- any one of the following lines.                            -->
    <inherits name='com.google.gwt.user.theme.standard.Standard' />
    <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
    <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->

    <!-- Other module inherits                                      -->

    <!-- Specify the app entry point class.                         -->
    <entry-point class='org.redboffin.bandmates.client.BandMates' />
</module>

我的 Eclipse XStream 库如下:

XStream
    |__ Access rules : No rules defined
    |__ Native library location: (None)
    |__ xstream-1.3.2.jar [path to jar]
        |__ Source Attachment: xstream-1.3.2-sources.jar [path to source jar]
        |__ Javadoc location: [path to javadoc]
        |__ Native library location: (None)
        |__ Access rules : No restrictions

我更熟悉 Netbeans,因此我可能设置不正确,但我认为我已将 XStream 作为第三方库包含到我的 Eclipse GWT 项目中,并正确引用了二进制 jar、源 jar 和 javadoc罐子

引发错误的客户端方法:

public void onSuccess(String profilesXml) {

    // Deserialize the xml
    XStream xstream = new XStream(new DomDriver());
    ProfilesImpl profiles = (ProfilesImpl) xstream.fromXML(profilesXml);

    // Show the RPC result to the user
    this.friendsWidget.setFriendProfiles(profiles);         
    this.friendsWidget.update();

}

还有 GWT 编译器错误:

Compiling module org.redboffin.bandmates.BandMates
    Validating newly compiled units
        [ERROR] Errors in 'file:/C:/Documents%20and%20Settings/Darren/workspace/BandMates/src/org/redboffin/bandmates/client/widgets/FriendsWidget.java'
        [ERROR] Line 63: No source code is available for type com.thoughtworks.xstream.XStream; did you forget to inherit a required module?
        [ERROR] Line 63: No source code is available for type com.thoughtworks.xstream.io.xml.DomDriver; did you forget to inherit a required module?
    Finding entry point classes
        [ERROR] Unable to find type 'org.redboffin.bandmates.client.BandMates'
            [ERROR] Hint: Previous compiler errors may have made this type unavailable
        [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly

我不确定您可能需要哪些其他信息来帮助我,但如果您需要我未提供的信息,请询问。

感谢您阅读本文 :-)

【问题讨论】:

    标签: gwt jar


    【解决方案1】:

    您不需要在您的 gwt.xml 文件中导入您的 XStreams 包。例如。类似:

    <inherits name='com.thoughtworks.xstream'/>
    

    ?

    【讨论】:

    • 包含继承标签后,编译器会说:加载继承的模块 'com.thoughtworks.xstream' [错误] 无法在类路径中找到 'com/thoughtworks/xstream.gwt.xml';可能是错字,或者您忘记在源代码中包含类路径条目?
    • 好吧,我不是 GWT 专家,但我认为 jar 需要有源代码(GWT 编译器需要)和 xml 文件。有关更多信息,请参阅此博客 (roberthanson.blogspot.com/2006/05/…)。
    【解决方案2】:

    GWT 将 Java 源代码编译为 JavaScript。你不能只指向一个普通的罐子。如果您确实必须使用 XStream,则需要在客户端包下包含源代码或创建一个单独的模块并导入它。

    但对我来说,这只是重新发明轮子。你会有很多工作,而且会比 RPC 慢。即使有其他客户端使用 XML 输出,也许您应该考虑两种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2013-02-13
      • 2017-01-12
      相关资源
      最近更新 更多