2012-02-03 2 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] [щебет] - Проверка вновь скомпилированные единиц [TRACE] [щебет]
- Обнаружение классов точек входа [ ERROR] [twitter] - Ошибки в файле:/E: /workspace/Twitter/src/in/isuru/twitter/client/Twitter.java '
[ERROR] [твиттер] - строка 43: нет исходного кода для типа
twitter4j.Tweet; вы забыли унаследовать необходимый модуль? [ERROR]
[щебет] - Ошибки в
'файл:/E: /workspace/Twitter/src/in/isuru/twitter/client/TwitterServiceAsync.java'
[ERROR] [щебет] - Линия 11: Нет исходного кода для типа
twitter4j.Tweet; вы забыли унаследовать необходимый модуль? [ERROR]
[щебет] - Невозможно найти тип '' in.isuru.twitter.client.Twitter
[ERROR] [щебет] - Подсказка: Предыдущие ошибки компилятора могут быть сделаны
этот тип недоступен [ERROR] [ twitter] - Подсказка: проверьте цепочку наследования
из вашего модуля; он не может быть наследования
требуемый модуль или модуль не может добавлять его исходный путь записей
правильно [ERROR] [Twitter] - Не удалось загрузить модуль «щебет» пользователя
агента «Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535,7 (KHTML, как
Gecko) Chrome/16.0.912.77 Safari/535,7' в 127.0.0.1:7901

ответ

0

класса twitter4j.Tweet не может быть использован в коде клиента, так как он не входит ни в одном наследуется GWT. Вам необходимо создать свой собственный класс переносных объектов, например TweetDTO где-то в ваших client или shared пакетах. Только этот объект должен использоваться в интерфейсах TwitterServiceAsync и TwitterService. Затем в вашем сервлете вы создаете TweetDTO копии требуемых значений от Tweet до TweetDTO, а затем возвращаете список TweetDTO.