Я пытаюсь сделать этот пример ;Я только что столкнулся со странной ошибкой, которая возникает, когда вызывается метод sendMessage (String msg)
трассировка стека говорит
Домен [ОШИБКА] Ошибка клиента: Ошибка при регистрации клиента для домена!com.google.gwt.user.client.rpc.StatusCodeException: 404 ...
Я не совсем уверен, откуда исходит ошибка: S
Код EntryPoint
public class ImageViewer implements EntryPoint {
/**
* The domain to which we want to register our listener to
*/
private static final Domain DOMAIN = DomainFactory.getDomain("my_domain");
private RichTextArea echoTextArea;
private RichTextArea sendTextArea;
private ImageViewerBL imageViewerBL=new ImageViewerBL();
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
FlowPanel flowPanel = new FlowPanel();
rootPanel.add(flowPanel, 10, 10);
flowPanel.setSize("392px", "384px");
Label lblEcho = new Label("Echo : ");
flowPanel.add(lblEcho);
echoTextArea= new RichTextArea();
flowPanel.add(echoTextArea);
Label lblInput = new Label("Input : ");
flowPanel.add(lblInput);
sendTextArea = new RichTextArea();
flowPanel.add(sendTextArea);
HorizontalPanel horizontalPanel = new HorizontalPanel();
flowPanel.add(horizontalPanel);
Button btnSend = new Button("SEND");
btnSend.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
imageViewerBL.sendMessage(sendTextArea.getText());
}
});
horizontalPanel.add(btnSend);
this.initBL();
}
RemoteEventServiceFactory theEventServiceFactory;
RemoteEventService theEventService;
private void initBL()
{
/**
* Create an EventService
*/
theEventServiceFactory = RemoteEventServiceFactory.getInstance();
theEventService = theEventServiceFactory.getRemoteEventService();
/**
* Register our listener to the domain
*/
theEventService.addListener(DOMAIN, new MyListener(){
public void onMyEvent(MyEvent event){
/**
* Get the message from the event and append it to the allready received messages
*/
echoTextArea.setText( echoTextArea.getText() + event.getMessage() + "n" );
}
});
}
}
код ImageViewerBL
public class ImageViewerBL implements IsSerializable {
public void sendMessage(String message)
{
TestServiceAsync service=(TestServiceAsync)GWT.create(TestService.class);
AsyncCallback callback=new AsyncCallback()
{
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(Object result) {
Window.alert("Message has been sent");
}
};
}
}
Весь остальной код полностью такой, как показано в примере.Помогите мне выяснить, откуда исходит ошибка.
С сетью Firebug я вижу это
как сообщение:
7 | 0 | 8 | http://127.0.0.1:8888/com.mycompany.project.ImageViewer/|96C13DAC0140CBCE9399464D9D221B3D|de.novanic.eventservice.client.event.service.EventService|register|de.novanic.eventservice.client.event.domain.Domain|de.novanic.eventservice.client.event.filter.EventFilter|de.novanic.eventservice.client.event.domain.DefaultDomain/240262385|my_domain|1|2|3|4|2|5|6|7|8|0|
и ответ говорит следующее:
Ошибка 404 NOT_FOUND
ОШИБКА HTTP: 404
NOT_FOUND
RequestURI = / com.mycompany.project.ImageViewer / gwteventservice
Работает на Jetty: //
Относительно запуска приложения - web.xml имеет значение
<web-app>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>ImageViewer.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>TestService</servlet-name>
<servlet-class>com.mycompany.project.server.TestServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestService</servlet-name>
<url-pattern>/com.mycompany.project.ImageViewer/TestService</url-pattern>
</servlet-mapping>
</web-app>
в методе sendMessage (), вызывая режим dev:
00: 00: 38,360 [ОШИБКА] Ошибка клиента: ошибка при обработке события!com.google.gwt.user.client.rpc.StatusCodeException: 500 Ошибка вызова на сервере;подробности см. в журнале сервера по адресу com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived (RequestCallbackAdapter.java:209) по адресу com.google.gwt.http.client.Request.fireOnResponseReceived (Request.java:28).) в com.google.gwt.http.client.RequestBuilder $ 1.onReadyStateChange (RequestBuilder.java:395) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpative.Impor.Impj ()в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в com.google.gwt.dev.shell.MethodAdaptor.intorj Method (: 103) на com.google.gwt.dev.shell.MethodDispatch.invoke (MethodDispatch.java:71) на com.google.gwt.dev.shell.OophmSessionHandler.invoke (OophmSessionHandler.java:167) на com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn (BrowserChannelServer.java:326) в com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript (BrowserChannelServer.java:207) на com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke (ModuleSpaceOOPHM.java:132) на com.google.gwt.dev.shell.ModuleSpace.invokeNative (ModuleSpace.java:561)на com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject (ModuleSpace.java:269) на com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject (JavaScriptHost.java:91) на com.google.gwt.core.client.impl.Impl.apply (Impl.java)
и код метода сервлета:
@Override
public void sendMessage(String message) {
/**
* We dont save the incomming messages on the server. We just send an MyEvent to all
* registered Listeners on the Domain.
*/
// try {
// this.addEvent(DOMAIN, new MyEvent(message));
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
}
... Я прокомментировал код, который вызывает ошибку 500;Так что если не запущен закомментированный код, то ошибка 500 id не выдается;Так что проблема где-то в методе addEvent (), но я не уверен, что именно вызывает проблему: S
Что на самом деле может быть не так?
Спасибо