salut
j'utilise gwt et struts et je tente de renvoyer les erreurs du server vers le client
je me suis fait un mini projet simple...
mon action
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 com.google.gwt.user.server.rpc.UnexpectedException: S ervice method 'public java.lang.String org.yournamehere.action.WebErrorAction.myMethod(java.lang.String) throws org.yournamehere.client.ErrorManager' threw an unexpected exception: java.lang.reflect.InvocationTargetException
ma class d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class WebErrorAction extends RemoteServiceServlet implements GWTService { public WebErrorAction() { } public String myMethod(String s) throws ErrorManager { GWTServiceImpl serviceImpl = new GWTServiceImpl(); return serviceImpl.myMethod(s); } }
le service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class ErrorManager extends Exception implements IsSerializable { private String errorManager; public ErrorManager() { } public ErrorManager(String errorManager) { this.errorManager = errorManager; } public String getErrorManager() { return this.errorManager; } }
service async
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface GWTService extends RemoteService{ public String myMethod(String s) throws ErrorManager; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface GWTServiceAsync { public void myMethod(String s, AsyncCallback callback); }
côté client, appel du service
implémentation de la méthode du service, provocation de l'erreur... pour tester
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public void callService(String s) { GWTServiceAsync service = (GWTServiceAsync) GWT.create(GWTService.class); AsyncCallback callback = new AsyncCallback() { public void onSuccess(Object result) { lblServerReply.setText((String) result); } public void onFailure(Throwable caught) { String details = caught.getMessage(); if (caught instanceof ErrorManager) { details = ((ErrorManager) caught).getErrorManager() + " occured"; } Window.alert("error " + details); } }; ServiceDefTarget endpoint = (ServiceDefTarget) service; endpoint.setServiceEntryPoint("WebErrorAction.action"); service.myMethod(s, callback); }
struts.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class GWTServiceImpl extends RemoteServiceServlet implements GWTService { public String myMethod(String s) throws ErrorManager { throw new ErrorManager("error occured " + s); } }
dans mon web.xml j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <package name="samplepackage" extends="gwt-default"> <action name="WebErrorAction" class="org.yournamehere.action.WebErrorAction"> <interceptor-ref name="autowiring"/> <interceptor-ref name="gwt"/> </action> </package>
du côté client, onFailure est bien appelé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <filter> <filter-name>action2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>action2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
car j'ai le message
c'est comme si ErrorManager ne serait pas reconnu, je crois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2error: The call failed on the server; see server log for details
une idée?
Partager