WebService中未处理SQL异常

时间:2018-07-10 14:54:10

标签: java sql web-services exception-handling

我们开发了无状态Web服务实现。我们使用JPA作为ORM层来执行数据库操作。在服务方法中,我们使用了实体管理器来保留实体。在将同一条记录保留到表中的同时,我们无法处理那些异常(node:3690) UnhandledPromiseRejectionWarning: Error: spawn EACCES

"Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TIGOSUSCRIPTIONES.SYS_C0020549) violated" exception in Service method. It is directly throwing the following exception in client result.

如何处理此异常。以下是我们在服务方法业务逻辑中使用的代码。

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Transaction rolled back 
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178) 
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) 
at $Proxy30.registerSaleOutcome(Unknown Source) 

您能帮我解决这个问题吗?

预先感谢。

1 个答案:

答案 0 :(得分:0)

调用em.persist(recycle);时,recycle对象将与EntityManager附加在一起。这并不意味着recycle对象会立即插入(持久化)到数据库中。提交正在进行的事务时,EntityManager将recycle对象插入数据库。看来您的public void recycleOperation方法是Transactional。这意味着EntityManager在完成recycle方法的执行之后将插入recycleOperation对象。因此,您看到的异常是在recycleOperation方法的执行完成时产生的。

长话短说,应该在调用recycleOperation的方法中捕获异常。