Tag: exception

Java中的类IOException是否是未经检查的RuntimeException?

您是否同意Java类java.io.IOException的设计者应该使它成为从java.lang.RuntimeException派生的未经检查的运行时exception,而不是仅从java.lang.RuntimeException派生的已检查exception? 我认为类IOException应该是一个未经检查的exception,因为应用程序几乎无法解决文件系统错误等问题。 但是, 当你不能抛出exception时 , Elliotte Rusty Harold声称大多数I / O错误是暂时的,所以你可以在放弃之前多次重试I / O操作: 例如,IOComparator可能不会出现I / O错误,但是 – 因为许多I / O问题是暂时的 – 您可以重试几次,如清单7所示: 通常情况如此吗? Java应用程序可以纠正I / O错误还是等待系统恢复? 如果是这样,那么检查IOException是合理的,但如果不是这样,则应取消选中IOException,以便业务逻辑可以将此exception的处理委托给单独的系统error handling程序。

检查某个exception类型是否是嵌套exception中的原因(原因等等)的最佳方法?

我正在编写一些JUnit测试,以validation是否抛出了类型MyCustomException的exception。 但是,此exception多次包含在其他exception中,例如InvocationTargetException,而InvocationTargetException又包含在RuntimeException中。 什么是确定MyCustomException是否以某种方式导致我实际捕获的exception的最佳方法? 我想做这样的事情(见下划线): try { doSomethingPotentiallyExceptional(); fail(“Expected an exception.”); } catch (RuntimeException e) { if (!e. try { doSomethingPotentiallyExceptional(); fail(“Expected an exception.”); } catch (RuntimeException e) { if (!e. e.wasCausedBy (MyCustomException.class) fail(“Expected a different kind of exception.”); } (MyCustomException.class) fail(“Expected a different kind of exception.”); } 我想避免调用getCause()一些“层”深层,以及类似的丑陋的解决方法。 有更好的方式吗? (显然,Spring有NestedRuntimeException.contains(Class) ,它可以做我想要的 – 但我没有使用Spring。) 关闭:好的,我想有一个实用方法真的没有绕过:-)感谢所有回复的人!

用于HTTP错误的Javaexception类是什么?

我正在使用Apache HttpClient,并希望通过Javaexception机制将HTTP错误(400 Bad Request,404 Not Found,500 Server Error等)传达给调用代码。 Java标准库或广泛使用的库中是否存在适合使用或子类用于此目的的exception? 另一种方法是检查状态返回码。 这似乎是HttpClient设计理念,但由于这些错误在我的应用程序中确实非常特殊,我希望在它们发生时为我设置堆栈跟踪和其他好的exception事项。

postgresql错误:由于用户请求而取消语句

postgresql中导致此错误的原因是什么? org.postgresql.util.PSQLException: ERROR: canceling statement due to user request 我的软件版本: 9.1.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2), 64-bit”. PostgreSQL 9.1.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2), 64-bit”. 我的postgresql驱动程序是: postgresql-9.2-1000.jdbc4.jar 使用java版本: Java 1.7 线索:我的postgresql数据库是固态硬盘驱动器,这个错误随机发生,有时根本不发生。

如何不抛出一般指定的exception?

我创建了一个“生成器”接口(与方法引用一起使用,分别用于unit testing的模拟): @FunctionalInterface public interface Factory { public R newInstanceFor(T t) throws X; } 我创建的那样,因为我的第一个用例实际上必须抛出一些已检查的WhateverException 。 但我的第二个用例没有投掷X. 我能想出的让编译器满意的最好方法是: Factory factory; 这编译,并做我需要的,但仍然是丑陋的。 有没有办法保留单个接口,但在声明特定实例时不提供X?

连接Java-MySql:不允许公钥检索

我尝试使用连接器8.0.11与Java协调MySql数据库。 一切似乎都没问题,但我有这个例外: 线程“main”中的exceptionjava.sql.SQLNonTransientConnectionException: 不允许公钥检索 这是我第一次使用MySql而且我找不到任何解决方案。 谢谢你的帮助! 堆栈跟踪: Exception in thread “main” java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8) Connector Manager: public class ConnectionManager { public static final String serverTimeZone = “UTC”; […]

在Java中捕获Throwable的最佳实践

有时,您只需要捕获Throwable,例如在编写调度程序队列时调度通用项目并需要从任何错误中恢复(所述调度程序记录所有捕获的exception,但是静默,然后继续执行其他项目)。 我能想到的一个最佳实践是,如果它是InterruptedException,总是重新抛出exception,因为这意味着有人打断了我的线程并想要杀死它。 另一个建议(来自评论,而非答案)是始终重新抛出ThreadDeath 还有其他最佳做法吗?

处理Spring Security中的自定义exception

我们正在使用spring MVC + spring security + hibernate创建一个RESTful API。 API可以生成JSON和HTML。 为弹簧安全做一个好的error handling让我很头疼: 身份validation可以通过各种方式进行:BasicAuth,通过POST请求中的不同参数以及Web登录。 对于每个身份validation机制,在spring security xml config的 namespace元素中声明了一个filter。 我们在自定义HandlerExceptionResolver处理所有springexception。 这适用于我们的控制器中抛出的所有exception,但我不知道如何处理自定义spring安全filter中引发的自定义exception。 由于spring安全filter在我们调用任何控制器之前到来,因此我们没有看到我们在自定义spring安全filter中抛出的exception。 我在stackoverflow上找到了这个问题: 在Spring Security中使用自定义exception 。 但是我不明白他们在哪里处理那里抛出的exception。 我们尝试了这种方法,但我们没有调用自定义的HandlerExceptionResolver 。 而是向用户呈现由tomcat呈现的丑陋堆栈跟踪。 我们为什么需要这个? 可以激活和停用用户。 如果它们被停用并尝试执行某些操作,我们希望返回带有自定义错误消息的JSON。 这应该与spring security抛出AccessDeniedException时显示的内容不同。 AccessDeniedException以某种方式使它成为我们的HandlerExceptionResolver ,但我无法完全遵循。 可能的解决方案我们考虑过使用ExceptionTranslationFilter ,但是当我们抛出自定义exception(在doFilter()方法的catch语句中设置断点)时,不会调用它。 在我的理解中,应该调用这个catch块,并且应该使用认证入口点。 另一种可能性:我们可以在spring安全filter链中执行与ExceptionTranslationFilter类似的操作,并执行与AccessDeniedHandler类似的操作: RequestDispatcher dispatcher = request.getRequestDispatcher(errorPage); dispatcher.forward(request, response); 我们可以在请求中添加一些参数(错误代码,原因等)并让它指向一个控制器,它将处理JSON或HTML中的渲染。 以下是我们配置的简短摘录: 春季安全: HandlerExceptionResolver的AppConfig @Bean public HandlerExceptionResolver handlerExceptionResolver(){ logger.info(“creating handler […]

Java catch块,捕获exception不是最终的

我正在查看Java SE7的新function,目前我正在这里: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html 关于catch多function,当我遇到这个声明时: 注意:如果catch块处理多个exception类型,则catch参数隐式为final。 在此示例中,catch参数ex是final,因此您无法在catch块中为其分配任何值。 我从未注意到在处理捕获的exception的经典案例中,捕获的exception不是最终的。 我只是想知道为什么这首先是一件好事? 在猜测重新抛出它或者记录它的消息之前,对于一个被捕获的exception进行必要的修改是不是不明智? 是否应该由创建exception的trowing机制来完成它应该代表什么呢? 我从来没有看到在catch块中修改exception可能有人指出它的好处? 谢谢!

如何使用失败的xsdvalidation获取xml文件的元素和无效的xml文件

我目前正在使用我的XSD来validation我的xml。 这部分工作正常我的问题是我想获得无效的标签/值的元素。 InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml)); XMLStreamReader reader = null; SchemaFactory factory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(xsdschemalocation); Validator validator = schema.newValidator(); try { reader = XMLInputFactory.newInstance().createXMLStreamReader(new StreamSource(new StringReader(xml))); } catch (XMLStreamException ex) { LogController.getLogger().logSEVERE(“Unable to create the streamreader from the xml source”, ex.getLocalizedMessage()); return false; } try { validator.validate(new StAXSource(reader)); } catch (IOException […]