GWT RPC无法编译该项目 [英] GWT RPC cannot compile the project

查看:125
本文介绍了GWT RPC无法编译该项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题是前一个问题的延伸。 GWT无法编译项目



请看看并告诉我它有什么问题。



客户端。



Twitter.java

  package in.isuru.twitter.client; 

import java.util.ArrayList;

导入twitter4j.Tweet;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.HasHorizo​​ntalAlignment;
import com.google.gwt.user.client.ui.RootPanel;

/ **
*入口点类定义< code> onModuleLoad()< / code> ;.
* /
public class Twitter实现EntryPoint {


private final TwitterServiceAsync searchService = GWT.create(TwitterService.class);

public void onModuleLoad(){

//创建一个Flex表格
final FlexTable flexTable = new FlexTable();
FlexCellFormatter cellFormatter = flexTable.getFlexCellFormatter();
flexTable.addStyleName(cw-FlexTable);
flexTable.setWidth(32em);
flexTable.setCellSpacing(5);
flexTable.setCellPadding(3);

//添加一些文本
cellFormatter.setHorizo​​ntalAlignment(0,1,HasHorizo​​ntalAlignment.ALIGN_LEFT);
cellFormatter.setColSpan(0,0,2);

searchService.search(love,new AsyncCallback< ArrayList< Tweet>>(){

@Override
public void onFailure(Throwable caught){
//尚未完成。

}

@Override
public void onSuccess(ArrayList< Tweet> result){
for int i = 0; i< result.size(); i ++){
Tweet tweet = result.get(i);
String user = tweet.getFromUser();
字符串状态= tweet.getText();
addRow(flexTable,user);
addRow(flexTable,status);

}


}});


flexTable.ensureDebugId(cwFlexTable);
RootPanel.get()。add(flexTable);
}

/ **
*向flex表添加一行。
* /
private void addRow(FlexTable flexTable,String status){
int numRows = flexTable.getRowCount();
flexTable.setText(numRows,0,status);
flexTable.getFlexCellFormatter()。setRowSpan(0,1,numRows + 1);
}

/ **
*从flex表中删除一行。
* /
private void removeRow(FlexTable flexTable){
int numRows = flexTable.getRowCount();
if(numRows> 1){
flexTable.removeRow(numRows - 1);
flexTable.getFlexCellFormatter()。setRowSpan(0,1,numRows - 1);
}

}
}

TwitterService。 java

  package in.isuru.twitter.client; 

import java.util.ArrayList;

导入twitter4j.Tweet;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

@RemoteServiceRelativePath(search)
public interface TwitterService extends RemoteService {
ArrayList< Tweet>搜索(字符串searchTerm)抛出IllegalArgumentException;
}

TwitterServiceAsync.java

  package in.isuru.twitter.client; 

import java.util.ArrayList;

导入twitter4j.Tweet;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface TwitterServiceAsync {

void search(String searchTerm,AsyncCallback< ArrayList< Tweet>> callback)throws llegalArgumentException;
}

服务器端 $ b

  package in.isuru.twitter.server; 

import java.util.ArrayList;

import twitter4j.Query;
导入twitter4j.QueryResult;
导入twitter4j.Tweet;
导入twitter4j.Twitter;
import twitter4j.TwitterException;
导入twitter4j.TwitterFactory;
导入in.isuru.twitter.client.TwitterService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class TwitterServiceImpl extends RemoteServiceServlet implements TwitterService {
$ b / **
*
* /
private static final long serialVersionUID = 1L;

ArrayList< Tweet> tweets = new ArrayList< Tweet>();

@Override
public ArrayList< Tweet> search(String searchTerm){
//工厂实例可重用且线程安全。
Twitter twitter = new TwitterFactory()。getInstance();
查询查询=新查询(searchTerm);
QueryResult result = null;
尝试{
result = twitter.search(query);
} catch(TwitterException e){
e.printStackTrace(); (Tweet tweet:result.getTweets()){
//System.out.println(tweet.getFromUser()+:+ tweet.getText());
}

tweets.add(tweet);

}

返回推文;
}

}

Twitter.gwt.xml p>

 <?xml version =1.0encoding =UTF-8?> 
< module rename-to ='twitter'>
<! - 继承核心Web Toolkit的东西。 - >
<继承了name ='com.google.gwt.user.User'/>

<! - 继承默认的GWT样式表。您可以更改 - >
<! - 通过取消注释,您的GWT应用程序的主题 - >
<! - - 以下任何一行。 - >
<继承了name ='com.google.gwt.user.theme.clean.Clean'/>
<! - < 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'/> - >


<! - 其他模块继承 - >

<! - 指定应用程序入口点类。 - >
< entry-point class ='in.isuru.twitter.client.Twitter'/>

<! - 指定可翻译代码的路径 - >
< source path ='client'/>
< source path ='shared'/>

< / module>

错误是


[DEBUG] [twitter] - 验证新编译的单元[TRACE] [twitter]

- 查找入口点类[错误] [twitter] - 错误in'file:/ E:/ workspace / Twitter / src / in / isuru / twitter / client / Twitter.java'

[错误] [twitter] - 第43行:没有源代码可用于类型

twitter4j.Tweet ;你忘了继承一个必需的模块吗? [错误]

[twitter] - 错误在

'文件中:/ E:/workspace/Twitter/src/in/isuru/twitter/client/TwitterServiceAsync.java' >
[错误] [twitter] - 第11行:没有源代码可用于类型

twitter4j.Tweet;你忘了继承一个必需的模块吗? [错误]

[twitter] - 无法找到类型'in.isuru.twitter.client.Twitter'

[错误] [twitter] - 提示:以前的编译器错误可能有使得
这个类型不可用[错误] [twitter] - 提示:检查你的模块中的

继承链;它可能不会继承一个

所需的模块,或者一个模块可能没有正确添加它的源路径条目

[错误] [twitter] - 无法从用户加载模块'twitter'

agent'Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 535.7(KHTML,类似于
Gecko)Chrome / 16.0.912.77 Safari / 535.7'at 127.0.0.1:7901



解决方案

class twitter4j.Tweet can not be用于客户端代码,因为它不包含在任何继承的GWT模块中。您需要在您的客户端中的某处创建您自己的传输对象类,例如 TweetDTO 共享包。只有这个对象应该用在接口 TwitterServiceAsync TwitterService 中。然后在你的servlet中,创建 TweetDTO 将所需的值从 Tweet 复制到 TweetDTO ,然后返回 TweetDTO 的列表。

This question is an extension of previous question. GWT Cannot compile the project

Please have a look and tell me what's wrong with it.

Client side.

Twitter.java

package in.isuru.twitter.client;

import java.util.ArrayList;

import twitter4j.Tweet;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.RootPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
*/
public class Twitter implements EntryPoint {


private final TwitterServiceAsync searchService = GWT.create(TwitterService.class);

public void onModuleLoad() {

     // Create a Flex Table
    final FlexTable flexTable = new FlexTable();
    FlexCellFormatter cellFormatter = flexTable.getFlexCellFormatter();
    flexTable.addStyleName("cw-FlexTable");
    flexTable.setWidth("32em");
    flexTable.setCellSpacing(5);
    flexTable.setCellPadding(3);

    // Add some text
    cellFormatter.setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_LEFT);
    cellFormatter.setColSpan(0, 0, 2);

    searchService.search("love", new AsyncCallback<ArrayList<Tweet>>() {

        @Override
        public void onFailure(Throwable caught) {
            //Not yet completed.

        }

        @Override
        public void onSuccess(ArrayList<Tweet> result) {
            for (int i=0 ; i <result.size() ; i++) {
                Tweet tweet = result.get(i);
                String user = tweet.getFromUser();
                String status = tweet.getText();
                addRow(flexTable, user);
                addRow(flexTable, status);

        }


    }});


    flexTable.ensureDebugId("cwFlexTable");
    RootPanel.get().add(flexTable);
  }

  /**
   * Add a row to the flex table.
   */
  private void addRow(FlexTable flexTable, String status) {
    int numRows = flexTable.getRowCount();
    flexTable.setText(numRows, 0, status);
    flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
  }

  /**
   * Remove a row from the flex table.
   */
  private void removeRow(FlexTable flexTable) {
    int numRows = flexTable.getRowCount();
    if (numRows > 1) {
      flexTable.removeRow(numRows - 1);
      flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows - 1);
    }

}
}

TwitterService.java

package in.isuru.twitter.client;

import java.util.ArrayList;

import twitter4j.Tweet;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

@RemoteServiceRelativePath("search")
 public interface TwitterService extends RemoteService {
ArrayList<Tweet> search(String searchTerm) throws IllegalArgumentException;
}

TwitterServiceAsync.java

package in.isuru.twitter.client;

import java.util.ArrayList;

import twitter4j.Tweet;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface TwitterServiceAsync {

void search(String searchTerm, AsyncCallback<ArrayList<Tweet>> callback) throws llegalArgumentException;
}

Server Side

package in.isuru.twitter.server;

import java.util.ArrayList;

import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import in.isuru.twitter.client.TwitterService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class TwitterServiceImpl extends RemoteServiceServlet implements TwitterService {

/**
 * 
 */
private static final long serialVersionUID = 1L;

ArrayList<Tweet> tweets = new ArrayList<Tweet>();

@Override
public ArrayList<Tweet> search(String searchTerm) {
    // The factory instance is re-useable and thread safe.
    Twitter twitter = new TwitterFactory().getInstance();
    Query query = new Query(searchTerm);
    QueryResult result = null;
    try {
        result = twitter.search(query);
    } catch (TwitterException e) {
        e.printStackTrace();
    }
    for (Tweet tweet : result.getTweets()) {
        //System.out.println(tweet.getFromUser() + ":" + tweet.getText());
        tweets.add(tweet);

    }

    return tweets;
}

 }

Twitter.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='twitter'>
 <!-- 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.clean.Clean'/>
 <!-- <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='in.isuru.twitter.client.Twitter'/>

 <!-- Specify the paths for translatable code                    -->
 <source path='client'/>
<source path='shared'/>

</module>

Error is

[DEBUG] [twitter] - Validating newly compiled units [TRACE] [twitter]
- Finding entry point classes [ERROR] [twitter] - Errors in 'file:/E:/workspace/Twitter/src/in/isuru/twitter/client/Twitter.java'
[ERROR] [twitter] - Line 43: No source code is available for type
twitter4j.Tweet; did you forget to inherit a required module? [ERROR]
[twitter] - Errors in
'file:/E:/workspace/Twitter/src/in/isuru/twitter/client/TwitterServiceAsync.java'
[ERROR] [twitter] - Line 11: No source code is available for type
twitter4j.Tweet; did you forget to inherit a required module? [ERROR]
[twitter] - Unable to find type 'in.isuru.twitter.client.Twitter'
[ERROR] [twitter] - Hint: Previous compiler errors may have made
this type unavailable [ERROR] [twitter] - 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 [ERROR] [twitter] - Failed to load module 'twitter' from user
agent 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like
Gecko) Chrome/16.0.912.77 Safari/535.7' at 127.0.0.1:7901

解决方案

class twitter4j.Tweet cannot be used in client code since it is not included in any inherited GWT module. You need to create your own transfer object class, for example TweetDTO somewhere in your client or shared packages. Only this object should be used in interfaces TwitterServiceAsync and TwitterService. Then in your servlet, you create TweetDTO copy required values from Tweet to TweetDTO and then return a list of TweetDTO.

这篇关于GWT RPC无法编译该项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆