GWT RPC无法编译该项目 [英] GWT RPC cannot compile the project
问题描述
这个问题是前一个问题的延伸。 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.HasHorizontalAlignment;
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.setHorizontalAlignment(0,1,HasHorizontalAlignment.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屋!