Java捕获错误不处理循环的第二次迭代
我有一个嵌套的try>catch情况,循环中的内部catch正在检查可能的预期异常。所有这些都可以在循环的第一次迭代中正常工作。如果发现一个重复,它将被报告并进入第二轮,如果发现另一个重复,它将抛出外部异常,而不是内部异常。这可能有一个很好/很明显的原因,但我和我的研究都没有发现 非常感谢您的帮助。 Java代码如下所示:Java捕获错误不处理循环的第二次迭代,java,exception,for-loop,try-catch,Java,Exception,For Loop,Try Catch,我有一个嵌套的try>catch情况,循环中的内部catch正在检查可能的预期异常。所有这些都可以在循环的第一次迭代中正常工作。如果发现一个重复,它将被报告并进入第二轮,如果发现另一个重复,它将抛出外部异常,而不是内部异常。这可能有一个很好/很明显的原因,但我和我的研究都没有发现 非常感谢您的帮助。 Java代码如下所示: try { // do some stuff for(Enumeration e=wholeResult.enumerateProduct();e.hasM
try {
// do some stuff
for(Enumeration e=wholeResult.enumerateProduct();e.hasMoreElements();){
tmpProduct = (Product)e.nextElement();
// do some stuff
try {
db.begin();
db.create(productCategory);
db.commit();
result.addProduct(tmpProduct);
cat.debug("Added " + tmpProduct.toString() + " to " + category.toString());
}
catch (org.exolab.castor.jdo.DuplicateIdentityException err) {
// Enters here first time only
cat.debug("Error caught");
try {
db.rollback();
} catch(TransactionNotInProgressException TnipE) {
}
cat.debug("SKIPPED - " + tmpProduct.toString() + " already in category " + category.toString());
}
}
// do some stuff
}
catch(Exception e) {
// Enters here second time
cat.error("Exception in CategoryAddBulkProductsAction: " + e.toString());
throw e;
}
调试输出/异常:
542 DEBUG [ajp-bio-8009-exec-1] () - Error caught
542 DEBUG [ajp-bio-8009-exec-1] () - SKIPPED - Item with two prices : Item With Two Prices (#99751) already in category Buy Online (#2281)
542 DEBUG [ajp-bio-8009-exec-1] () - Working with Sale Item : My Order Item (#127681)
548 ERROR [ajp-bio-8009-exec-1] () - Exception in CategoryAddBulkProductsAction: org.exolab.castor.jdo.TransactionAbortedException: Nested error: org.exolab.castor.jdo.DuplicateIdentityException: Duplicate identity found for object of type model.objects.ProductCategory with identity <497(497),127681(127681),2281(2281)>: an object with the same identity already exists in persistent storage: Duplicate identity found for object of type model.objects.ProductCategory with identity <497(497),127681(127681),2281(2281)>: an object with the same identity already exists in persistent storage
550 DEBUG [ajp-bio-8009-exec-1] () - Some kind of error occured
550 ERROR [ajp-bio-8009-exec-1] () - org.exolab.castor.jdo.TransactionAbortedException: Nested error: org.exolab.castor.jdo.DuplicateIdentityException: Duplicate identity found for object of type model.objects.ProductCategory with identity <497(497),127681(127681),2281(2281)>: an object with the same identity already exists in persistent storage: Duplicate identity found for object of type model.objects.ProductCategory with identity <497(497),127681(127681),2281(2281)>: an object with the same identity already exists in persistent storage
542调试[ajp-bio-8009-exec-1]()-捕获错误
542调试[ajp-bio-8009-exec-1]()-跳过-有两种价格的商品:有两种价格(#99751)的商品已经在网上购买(#2281)类别中
542调试[ajp-bio-8009-exec-1]()-处理销售项目:我的订单项目(#127681)
548错误[ajp-bio-8009-exec-1]()-CategoryAddBulkProductsAction中的异常:org.exolab.castor.jdo.TransactionBortedException:嵌套错误:org.exolab.castor.jdo.DuplicateIdentityException:为model.objects.ProductCategory类型的对象找到重复标识,标识为:持久存储中已存在具有相同标识的对象:找到重复标识对于标识为model.objects.ProductCategory类型的对象:永久存储中已存在具有相同标识的对象
550调试[ajp-bio-8009-exec-1]()-发生某种错误
550错误[ajp-bio-8009-exec-1]()-org.exolab.castor.jdo.TransactionBortedException:嵌套错误:org.exolab.castor.jdo.DuplicateIdentityException:为model.objects.ProductCategory类型的对象找到重复标识具有标识:持久存储中已存在具有相同标识的对象:为model.objects类型的对象找到重复标识具有标识的model.objects.ProductCategory:持久存储中已存在具有相同标识的对象
从您发布的日志输出判断,原因似乎是,由于某种原因,它实际上不是一个被抛出到代码中的DuplicateIdentityException
,而是您正在使用的这个库将其包装在TransactionBortedException
中。检查堆栈跟踪以查看实际抛出它的函数可能有助于您了解发生这种情况的原因
如果代码使用了
java.lang.Throwable
的标准原因包装,您可能会检查TransactionBortedException
的getCause()
返回的内容,以找出真正发生的情况,但这似乎有点难看。库不向您抛出根异常可能是有原因的。我建议查看它的文档以找出原因。您确定在循环的第二次迭代中抛出的异常是org.exolab.castor.jdo.DuplicateIdentityException
?@Vincent:叹气,我需要睡觉了。:-)我只看到了第一个和第三个。再次谢谢你。@Vincent,以下是第二轮引发的异常的完整详细信息:CategoryAddBulkProductsAction中的异常:org.exolab.castor.jdo.TransactionBortedException:嵌套错误:org.exolab.castor.jdo.DuplicateIdentityException:为model.objects.ProductCategory类型的对象找到重复标识:具有相同标识的对象标识已存在于永久性存储中:@cemlo:请将该信息编辑为可以正确格式化的问题?但是,DuplicateIdentityException
似乎被包装在外部异常中try
/catch
子句在确定捕获什么时不查看任何包装的异常。@Dolda2000:done,是的,看起来您可能发现了什么。包装异常是如何发生的?