2012-02-03 13 views
0

この質問は前の質問の拡張です。 GWT Cannot compile the projectGWT RPCはプロジェクトをコンパイルできません

ご覧になり、何が間違っているか教えてください。

クライアント側。

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; 
} 

サーバー側

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> 

エラーが

ある[DEBUG] [Twitterの] - 新しくコンパイル単位の検証[TRACE] [Twitterの]
- エントリポイントクラスを見つけます[ [エラー] [ツイッター] - 'ファイル:/ E:/workspace/Twitter/src/in/isuru/twitter/client/Twitter.java'のエラー
[ERROR] [twitter] - 43行目:ソースコードがありませんタイプ
の場合210 twitter4j.Tweet;必要なモジュールを継承することを忘れましたか? [ERROR]
[Twitterの] -
'ファイル:/ E:/workspace/Twitter/src/in/isuru/twitter/client/TwitterServiceAsync.java' でエラーが発生 - :ライン11
[ERROR] [ツイッター]タイプのソースコードはありません
twitter4j.Tweet;必要なモジュールを継承することを忘れましたか? [ERROR]
[Twitterの] - タイプを見つけることができません 'in.isuru.twitter.client.Twitter'
[ERROR] [Twitterの] - ヒント:前のコンパイラのエラーは、[
このタイプ使用できない[ERROR]を作ったかもしれませんtwitter] - ヒント:モジュールから継承チェーン
を確認してください。それは
必要なモジュールを継承することはできませんまたはモジュールは、そのソースパスが正しく
[ERROR] [Twitterの]エントリ追加することはできません - ユーザー
エージェント「のMozilla/5.0(Windows NTのからモジュールのロードに失敗しました「ツイッター」をそれは、任意の継承に含まれていないので、6.1)のAppleWebKit/535.7(KHTML、
のGecko)クローム/ 16.0.912.77サファリ/ 535.7' のような127.0.0.1:7901

答えて

0

クラスtwitter4j.Tweetでは、クライアントコードで使用することができませんGWTモジュール。独自の転送オブジェクトクラス(TweetDTOなど)をclientまたはsharedパッケージのどこかに作成する必要があります。このオブジェクトだけがTwitterServiceAsyncおよびTwitterServiceのインターフェイスで使用される必要があります。次に、サーブレットでTweetDTOをコピーし、TweetからTweetDTOにコピーし、次にTweetDTOのリストを返します。

関連する問題