【问题标题】:Socket read IOException not being caught?套接字读取 IOException 没有被捕获?
【发布时间】:2021-06-25 04:16:18
【问题描述】:

在 grails 中,socket 读取失败或者 ioexception 会被捕获吗?即使我将错误部分包装在 try catch 块中,也会触发以下错误。

ERROR 2021-03-28 08:34:10,170 [ajp-bio-8109-exec-39783] errors.GrailsExceptionResolver: IOException occurred when processing request: [POST] /race/results/
Socket read failed. Stacktrace follows:
java.io.IOException: Socket read failed
    at java.io.FilterInputStream.read(FilterInputStream.java:133)
    at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.Reader.read(Reader.java:140)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1485)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1461)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1436)
    at org.apache.commons.io.IOUtils.toString(IOUtils.java:585)
    at grails.converters.JSON.parse(JSON.java:312)
    at grails.converters.JSON.parse(JSON.java:347)

在抛出错误时,我已将其包装在 try catch 块中,如下所示。

 def results(){


        def results


        try {

            results = request.JSON


        } catch (IOException e1) {

            log.error "ERROR WHILE request.json in /results******************************************************************"

            render contentType: "text/json", text: '{"status":"fail"}'
            return

        }

此时抛出错误

results = request.JSON

我感谢任何见解。我正在使用 Grails 2.2。

谢谢!

更新:

这是完整的堆栈跟踪。谢谢!

ERROR 2021-03-28 08:34:10,170 [ajp-bio-8109-exec-39783] errors.GrailsExceptionResolver: IOException occurred when processing request: [POST] /race/results/
Socket read failed. Stacktrace follows:
java.io.IOException: Socket read failed
    at java.io.FilterInputStream.read(FilterInputStream.java:133)
    at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.Reader.read(Reader.java:140)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1485)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1461)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1436)
    at org.apache.commons.io.IOUtils.toString(IOUtils.java:585)
    at grails.converters.JSON.parse(JSON.java:312)
    at grails.converters.JSON.parse(JSON.java:347)
    at race.results(VirtualRaceController.groovy:2011)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 查看堆栈跟踪;看来异常是在该过程的后期引发的。
  • 实际上,这看起来像一个 partial 堆栈跟踪。有东西在调用grails.converters.JSON.parse ...,它看起来不像是问题中的代码。
  • 这是调用 json.parse results = request.JSON
  • 请添加完整的堆栈跟踪。
  • 我已经添加了完整的堆栈跟踪。谢谢!

标签: java json grails grails-2.2


【解决方案1】:

您可能会发现它抛出的是 ConverterException,而不是 IOException。代码如下:

class ConvertersExtension {
    static getJSON(HttpServletRequest request) {
        JSON.parse(request)
    }
}
public class JSON  {
   public static Object parse(HttpServletRequest request) throws ConverterException {
       // blah blah
       try {
            /// blah blah
       }
       catch (IOException e) {
           throw new ConverterException("Error parsing JSON", e);
       }
   }  
}

如果您使用的是 IDE,请右键单击相关 API 并选择“转到声明”,或 IDE 中的任何等效项,直到您向上追踪以查看抛出了什么。

【讨论】:

  • 谢谢。异常已被捕获。我在 try catch 块中将类型从 IOException 更改为 ConverterException。
猜你喜欢
  • 2011-09-04
  • 2015-01-29
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多