AppyDynamic报告FileNotFoundException错误

时间:2018-05-15 16:50:01

标签: java appdynamics

有一个简单的连接方法,

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class Connection {

    public boolean connect(URL url, String requestType) {
        HttpURLConnection connection = null;
        try {
            URLConnection urlConnection = url.openConnection();
            if (urlConnection instanceof HttpURLConnection) {
                connection = (HttpURLConnection) urlConnection;
                connection.setRequestMethod(requestType);
                connection.setRequestProperty("Authorization", getAuth()); //$NON-NLS-1$
            }

            if (connection == null) {
                return false;
            }
            connection.connect();
            return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
        } catch (IOException e) {
            return false;
        }
    }
}

如果URL路径不是有效路径,则会在AppyDynamics中将FileNotFoundException记录为错误。如何防止AppDynamics捕获这些异常,因为作为代码的一部分,它作为布尔返回处理,但AppDynamics充满了FileNotFoundException。提前谢谢。

更新 根据AppDynamics文档https://docs.appdynamics.com/display/PRO44/Errors+and+Exceptions HTTP错误响应(例如状态代码404或500响应)被记录为事务快照错误。正如我在上面的代码中所知,回复404是合法的。如何修改我的代码以防止AppDynamics显示它?任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

确定以后尝试在连接上执行getInputStream时是否确定没有得到FileNotFound(或者在实际代码中,如果这是一个简化的示例)?由于HttpUrlConnection实现了http协议,并且4xx代码是尝试调用getInputStream生成FNF的错误代码。相反,您应该调用getErrorStream。

我运行了您的代码(没有auth部分),并且我没有对返回404的url进行任何FilenotFoundException测试。

因此,在这种情况下,HttpUrlConnection正确实现了http协议,而appdynamics正确捕获了错误。 我遇到了同样的问题,即球衣将FnF封装在UniformResourceException中,但经过一些分析,实际上是球衣应提供返回输出之前检查状态代码的方式,或者正确使用httpurlconnection,在我们的情况下-Web服务不应返回404产生未找到结果,而是一个空集合的请求。

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Connection {

    public boolean connect(URL url, String requestType) {
        HttpURLConnection connection = null;
        try {
            URLConnection urlConnection = url.openConnection();
            if (urlConnection instanceof HttpURLConnection) {
                connection = (HttpURLConnection) urlConnection;
                connection.setRequestMethod(requestType);
            }
            if (connection == null) {
                return false;
            }
            connection.connect();
            System.out.println(connection.getResponseCode());
            return connection.getResponseCode() == HttpURLConnection.HTTP_OK;
        } catch (IOException e) {
            System.out.println("E" + e.getMessage());
            return false;
        }
    }

    public static void main(String args[])
    {
        Connection con = new Connection();
        try{
        con.connect(new URL("http://www.google.com/asdfasdfsd"), "GET");   
    } catch(MalformedURLException mfe)
    {

    }
    }
}