2015-12-09 7 views
0

Я пытаюсь переключить backend моего GWT приложение к Spring используя RestyGwt. я следовал этот пример:RestyGWT и весна. Как управлять объектами и моделями на клиенте. Ошибка: java.lang.NoClassDefFoundError: COM/Google/GWT/ядро ​​/ клиент/GWTBridge

  1. ekito
  2. dzone

Теперь интересно, что делать с Entities. Можно ли их использовать в клиенте? Я положил их в Shared пакет, но, к сожалению, я получаю сообщение об ошибке:

gru 09, 2015 11:06:08 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [Spring MVC Dispatcher Servlet] in context with path [/restgwt] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge] with root cause 
java.lang.ClassNotFoundException: com.google.gwt.core.client.GWTBridge 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) 
    at com.sagar.restgwt.shared.OrderConfirmation.toString(OrderConfirmation.java:18) 
    at java.lang.String.valueOf(String.java:2994) 
    at java.lang.StringBuilder.append(StringBuilder.java:131) 

Вот мои классы:

стороне клиента

@Path("/service") 
public interface InfoService extends RestService { 
    public static class Util { 
     private static InfoService instance; 

     public static InfoService getService() { 
      if (instance == null) { 
       instance = GWT.create(InfoService.class); 
      } 
      Resource resource = new Resource(GWT.getModuleBaseURL() + "service"); 
      ((RestServiceProxy) instance).setResource(resource); 
      return instance; 
     } 
    } 

    @GET 
    @Path("/loadInfo") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public void getInfo(MethodCallback<OrderConfirmation> callback); 
} 
public void onModuleLoad() { 

    Button button = new Button("Click Me"); 
    button.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      InfoService.Util.getService().getInfo(
        new MethodCallback<OrderConfirmation>() { 
         @Override 
         public void onSuccess(org.fusesource.restygwt.client.Method method, OrderConfirmation response) { 
          RootPanel.get().add(
            new Label(
              "message: " + response.message + " - ready time: " + response.ready_time) 
            ); 
         } 
         @Override 
         public void onFailure(org.fusesource.restygwt.client.Method method, 
           Throwable exception) { 
          // TODO Auto-generated method stub 
          GWT.log("Error"); 

         } 

        }); 
     } 
    }); 

стороне сервера

@Controller 
public class RestGWTController { 
    @RequestMapping(value = "/loadInfo", method = RequestMethod.GET, headers = "Accept=application/json") 
    public @ResponseBody OrderConfirmation handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     //GreetingServiceEndpoint endpoint = greetingService.getGreetingServiceEndpointPort(); 

     OrderConfirmation confirmation = new OrderConfirmation(); 
     //confirmation.message = endpoint.sayHello(); 
     confirmation.message = "Hello"; 
     confirmation.ready_time = System.currentTimeMillis() + 1000 * 60 * 30; 
     System.out.println("hit server"); 
     return confirmation; 
    } 
} 

Общий модуль

public class OrderConfirmation { 
    public String message; 
    public Long ready_time; 
    /** 
    * Example of how to create an instance of a JsonEncoderDecoder for a data 
    * transfer object. 
    */ 
    public interface OrderConfirmationJED extends JsonEncoderDecoder<OrderConfirmation> { 
    } 
    @Override 
    public String toString() { 
     if (GWT.isClient()) { 
      OrderConfirmationJED jed = GWT.create(OrderConfirmationJED.class); 
      return jed.encode(this).toString(); 
     } 
     return super.toString(); 
    } 
} 

Теперь я думаю о DTO на модуле shared и Entity на сервере. Я это правильно. Мой вопрос:

  1. Что для этого хорошего патруля для дизайна.
  2. Может ли серверная сторона Entity быть сериализована в json и использоваться на стороне клиента как объект Java в gwt?

Прошу вас, чтобы помочь.

ответ

0

Вам не хватает зависимости gwt-servlet.jar.

конфигурации Maven

Он должен быть <scope>compile</scope> который по умолчанию. Другие gwt-банки могут быть <scope>provided</scope>

  <dependency> 
        <groupId>com.google.gwt</groupId> 
        <artifactId>gwt-servlet</artifactId> 
        <version>${gwt.version}</version> 
      </dependency>