Gwt 选中的远程服务异常在tomcat中转换为StatusCodeException

Gwt 选中的远程服务异常在tomcat中转换为StatusCodeException,gwt,gwt-rpc,Gwt,Gwt Rpc,我有一个GWT应用程序,它对RemoteService执行常规RPC调用,RemoteService的方法可能会引发ServiceException: public class ServiceException extends Exception implements java.io.Serializable { private static final long serialVersionUID = 1L; public ServiceException() {} pu

我有一个GWT应用程序,它对RemoteService执行常规RPC调用,RemoteService的方法可能会引发ServiceException:

public class ServiceException extends Exception implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    public ServiceException() {}
    public ServiceException(final Throwable cause) {
        super(cause);
    }
    public ServiceException(final String errorMsg) {
        super(errorMsg);
    }
}
这在开发模式下工作得非常好,我在onFailure异步回调中获得了预期的异常消息,但当我编译应用程序并将其部署到tomcat时,我的异常会被转换为

com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details
就像在开发模式中一样,我的服务器日志显示了预期的异常原因,而我在抛出ServiceException之前自己记录了该原因

我在谷歌上查过这个,但找不到任何相关信息


(我正在使用GWT 2.4、java 1.6和Tomcat 7.0.16开发Mac OS X Lion)

您的GWT rpc servlet似乎无法正确处理异常。然后,您的tomcat容器通过发送http-500错误页面来处理异常。通常,异常应导致http-200响应,并在gwt编码的答案末尾显示“EX”。开发模式运行于某种码头集装箱。也许开发模式的jetty和tomcat之间存在一些差异,导致了不同的行为

请查看gwt rpc servlet代码以查找原因


顺便说一句:将错误原因放入异常的字段中是个坏主意。你永远不会知道原因是否可序列化

您的gwt rpc servlet似乎没有正确处理异常。然后,您的tomcat容器通过发送http-500错误页面来处理异常。通常,异常应导致http-200响应,并在gwt编码的答案末尾显示“EX”。开发模式运行于某种码头集装箱。也许开发模式的jetty和tomcat之间存在一些差异,导致了不同的行为

请查看gwt rpc servlet代码以查找原因


顺便说一句:将错误原因放入异常的字段中是个坏主意。你永远不会知道原因是否可序列化

愚蠢的错误。我最终发现问题来自于我正在使用的java模糊器配置中的一个意外输入错误。正因为如此,在构建我在tomcat中部署的war时,我的类名被重命名

愚蠢的错误。我最终发现问题来自于我正在使用的java模糊器配置中的一个意外输入错误。正因为如此,在构建我在tomcat中部署的war时,我的类名被重命名

在检查异常类型的地方发布客户端代码出于调试目的,客户端代码为:
public void onFailure(Throwable arg0){setErrorMessage(arg0.toString());}
这将字符串显示在我的应用程序的标签字段中。我发现客户端正确接收到异常。参考此内容,检查您的实现是否正确我完全按照教程中的步骤进行了操作;您可以看到MyException的声明,服务接口方法抛出ServiceException。正如我所说,异常是在dev模式下正确接收的,只有在tomcat中编译和运行时,它才被转换为调试目的,您可以通过在客户端代码中使用
捕获的instaceof ServiceException
来检查异常的类型。发布客户端代码如果您出于调试目的检查异常的类型,客户端代码为:
public void onFailure(Throwable arg0){setErrorMessage(arg0.toString());}
这将字符串显示在我的应用程序的标签字段中。我发现客户端正确接收到异常。参考此内容,检查您的实现是否正确我完全按照教程中的步骤进行了操作;您可以看到MyException的声明,服务接口方法抛出ServiceException。正如我所说,异常是在开发模式下正确接收的,只有当在tomcat中编译和运行时,它才被转换为调试目的,您可以通过在客户端代码中使用
catch instaceof ServiceException
来检查异常的类型。