remonter erreur du serveur au client
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...
Code:
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 |
mon action
Code:
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);
}
} |
ma class d'erreur
Code:
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;
}
} |
le service
Code:
1 2 3 4
|
public interface GWTService extends RemoteService{
public String myMethod(String s) throws ErrorManager;
} |
service async
Code:
1 2 3 4
|
public interface GWTServiceAsync {
public void myMethod(String s, AsyncCallback callback);
} |
côté client, appel du service
Code:
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);
} |
implémentation de la méthode du service, provocation de l'erreur... pour tester
Code:
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);
}
} |
struts.xml
Code:
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> |
dans mon web.xml j'ai
Code:
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> |
du côté client, onFailure est bien appelé...
car j'ai le message
Code:
1 2
|
error: The call failed on the server; see server log for details |
c'est comme si ErrorManager ne serait pas reconnu, je crois
une idée?