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 : 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
mon action
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);
    }
}
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
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 : 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;
}
service async
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
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);
    }
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
 
public class GWTServiceImpl extends RemoteServiceServlet implements GWTService {
 
    public String myMethod(String s) throws ErrorManager {
        throw new ErrorManager("error occured " + s);
    }
}
struts.xml
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>
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
 
<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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?