Java 在WebService中未处理SQL异常
我们开发了无状态Web服务实现。我们使用JPA作为ORM层来执行数据库操作。在服务方法中,我们使用实体管理器来持久化实体。在将同一记录持久化到表中时,我们无法处理由以下原因引起的异常:Java 在WebService中未处理SQL异常,java,sql,web-services,exception-handling,Java,Sql,Web Services,Exception Handling,我们开发了无状态Web服务实现。我们使用JPA作为ORM层来执行数据库操作。在服务方法中,我们使用实体管理器来持久化实体。在将同一记录持久化到表中时,我们无法处理由以下原因引起的异常::java.sql.SQLIntegrityConstraintViolationException:ORA-00001:unique constraint(tigoscriptiones.SYS_C0020549)违反了“服务方法中的异常”。它直接在客户端结果中抛出以下异常。 Exception in threa
:java.sql.SQLIntegrityConstraintViolationException:ORA-00001:unique constraint(tigoscriptiones.SYS_C0020549)违反了“服务方法中的异常”。它直接在客户端结果中抛出以下异常。
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)
如何处理此异常。下面是我们在服务方法业务逻辑中使用的代码
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void recycleOperation(Recycle recycle) throws RecycleFault_Exception{
try{
em.persist(recycle);
} catch(Exception e){
//not coming to this block
log.error("Exception in Data Insertion:"+e.getMessage());
RecycleFault fault = new RecycleFault();
fault.setErrorCode("101");
fault.setMessage("Record is already Existed");
RecycleFault_Exception faultExp = new RecycleFault_Exception("RecycleFault Exception", fault);
throw faultExp;
}
}
你能帮我解决这个问题吗
提前谢谢 当您调用
em.persist(回收)时
然后您的回收
对象与EntityManager连接。这并不意味着recycle
对象会立即插入(持久化)到数据库中。EntityManager在提交正在进行的事务时将回收
对象插入数据库。看起来您的public void recycleOperation
方法是事务性的。这意味着EntityManager在完成recycleOperation
方法的执行后插入recycle
对象。因此,您看到的异常是在recycleOperation
方法的执行完成时产生的
长话短说,您应该在调用
recycleOperation
的方法中捕获异常。谢谢您的回复。如果此方法是web服务方法,并且由客户端请求调用,如何处理异常?@AnılEmreÖzçelik,您使用Spring REST吗?然后可以使用@ExceptionHandler
处理顶级异常。详细信息:我正在使用soapweb服务。