Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在WebService中未处理SQL异常_Java_Sql_Web Services_Exception Handling - Fatal编程技术网

Java 在WebService中未处理SQL异常

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

我们开发了无状态Web服务实现。我们使用JPA作为ORM层来执行数据库操作。在服务方法中,我们使用实体管理器来持久化实体。在将同一记录持久化到表中时,我们无法处理由以下原因引起的异常:
: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服务。