有一个简单的连接方法,
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显示它?任何建议都会有所帮助。
答案 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)
{
}
}
}