GWT RPC не может скомпилировать проект - PullRequest
0 голосов
/ 03 февраля 2012

Этот вопрос является расширением предыдущего вопроса. GWT Невозможно скомпилировать проект

Пожалуйста, посмотрите и скажите, что с ним не так.

Клиентская сторона.

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]
- Поиск классов точки входа [ОШИБКА] [twitter] - Ошибки в 'файле: / E: /workspace/Twitter/src/in/isuru/twitter/client/Twitter.java'
[ОШИБКА] [twitter] - строка 43: исходный код для типа
недоступен twitter4j.Tweet; Вы забыли унаследовать необходимый модуль? [ERROR]
[twitter] - Ошибки в
«Файл: / E: /workspace/Twitter/src/in/isuru/twitter/client/TwitterServiceAsync.java'
[ОШИБКА] [twitter] - Строка 11: нет исходного кода для типа
twitter4j.Tweet; Вы забыли унаследовать необходимый модуль? [ERROR]
[twitter] - Невозможно найти тип 'in.isuru.twitter.client.Twitter'
[ОШИБКА] [twitter] - Подсказка: предыдущие ошибки компилятора могли сделать
этот тип недоступен [ОШИБКА] [твиттер] - Подсказка: отметьте
цепочка наследования от вашего модуля; может не наследовать
требуемый модуль или модуль может не добавлять свои исходные записи пути
правильно [ОШИБКА] [twitter] - Не удалось загрузить модуль '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

1 Ответ

0 голосов
/ 03 февраля 2012

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

...