我有一个很大的奇怪探测器,包括tomcat 7,spring 3.1.1和windows 7 pro x64。
当我的网络应用程序抛出异常并且由此自定义HandlerExceptionResolver管理时,会出现问题:
public class JsonHandlerExceptionResolver implements HandlerExceptionResolver {
private static Logger log = Logger.getLogger(JsonHandlerExceptionResolver.class);
@Override
@ResponseBody
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse response, Object obj, Exception e) {
Output out=new Output(false);
out.setException(e.getClass().getName());
out.setError(e.getLocalizedMessage());
response.setContentType("application/json");
log.error("",e);
try{
response.getWriter().println(new Gson().toJson(new Output(e.getMessage(),e.getClass().getSimpleName())));
response.getWriter().flush();
response.getWriter().close();
}catch (Exception e1) {
log.error(e1);
e1.printStackTrace();
}
return null;
}
}
http请求挂起,我必须停止tomcat解锁它。在日志文件中,我可以看到正确的堆栈跟踪,但它只在tomcat shutdown命令之后打印(所以我知道tomcat真的被挂起了。)
奇怪的是,只有当tomcat是由C#应用程序启动时才出现此问题(它运行带有正确参数的javaw进程),如果我尝试通过命令行启动它(相同命令)问题不会发生!请记住,这个错误不是系统性的,在许多相同的系统(win7 + tomcat)中它都有效。 你知道可以做什么吗?
答案 0 :(得分:0)
我的猜测是,如果C#正在产生Tomcat,那么共享IO可能存在一些问题,可以通过检查StartInfo.RedirectStandardError属性来验证。
请参阅ProcessInfo and RedirectStandardOutput了解详情
干杯