Browse Source
* pull102: polishing Add exception translator for EclipseLink exceptionspull/537/merge
6 changed files with 276 additions and 0 deletions
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import org.eclipse.persistence.exceptions.EclipseLinkException; |
||||
import org.springframework.dao.DataAccessException; |
||||
import org.springframework.dao.support.PersistenceExceptionTranslator; |
||||
|
||||
/** |
||||
* {@link PersistenceExceptionTranslator} capable of translating {@link EclipseLinkException} |
||||
* instances to Spring's {@link DataAccessException} hierarchy. |
||||
* |
||||
* @author Jan Stamer |
||||
* @since 4.1 |
||||
* @see org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor |
||||
*/ |
||||
public class EclipseLinkExceptionTranslator implements PersistenceExceptionTranslator { |
||||
|
||||
public DataAccessException translateExceptionIfPossible(RuntimeException ex) { |
||||
if (ex instanceof EclipseLinkException) { |
||||
return convertEclipseLinkAccessException((EclipseLinkException) ex); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* Convert the given EclipseLinkException to an appropriate exception from |
||||
* the {@code org.springframework.dao} hierarchy. |
||||
* @param ex EclipseLinkException that occurred |
||||
* @return a corresponding DataAccessException |
||||
* @see EclipseLinkUtils#convertEclipseLinkAccessException |
||||
*/ |
||||
protected DataAccessException convertEclipseLinkAccessException(EclipseLinkException ex) { |
||||
return EclipseLinkUtils.convertEclipseLinkAccessException(ex); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import org.eclipse.persistence.exceptions.EclipseLinkException; |
||||
import org.springframework.dao.UncategorizedDataAccessException; |
||||
|
||||
/** |
||||
* EclipseLink-specific subclass of UncategorizedDataAccessException, for |
||||
* EclipseLink system errors that do not match any concrete |
||||
* <code>org.springframework.dao</code> exceptions. |
||||
* |
||||
* @author Jan Stamer |
||||
* @since 4.1 |
||||
* @see EclipseLinkUtils#convertEclipseLinkAccessException(EclipseLinkException) |
||||
*/ |
||||
@SuppressWarnings("serial") |
||||
public class EclipseLinkSystemException extends UncategorizedDataAccessException { |
||||
|
||||
/** |
||||
* Create a new HibernateSystemException, wrapping an arbitrary |
||||
* {@link EclipseLinkException}. |
||||
* @param cause the HibernateException thrown |
||||
*/ |
||||
public EclipseLinkSystemException(EclipseLinkException cause) { |
||||
super(cause != null ? cause.getMessage() : null, cause); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import org.eclipse.persistence.exceptions.EclipseLinkException; |
||||
import org.springframework.dao.DataAccessException; |
||||
|
||||
/** |
||||
* Helper class featuring methods for Eclipse Link. Also provides support for |
||||
* exception translation. |
||||
* |
||||
* @author Jan Stamer |
||||
* @since 3.2 |
||||
*/ |
||||
public abstract class EclipseLinkUtils { |
||||
|
||||
/** |
||||
* Convert the given EclipseLinkException to an appropriate exception from |
||||
* the <code>org.springframework.dao</code> hierarchy. |
||||
* @param ex EclipseLinkException that occurred |
||||
* @return the corresponding DataAccessException instance |
||||
* @see EclipseLinkExceptionTranslator#convertEclipseLinkAccessException(EclipseLinkException) |
||||
*/ |
||||
public static DataAccessException convertEclipseLinkAccessException(EclipseLinkException ex) { |
||||
return new EclipseLinkSystemException(ex); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
import org.eclipse.persistence.exceptions.DatabaseException; |
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* @author Jan Stamer |
||||
*/ |
||||
public class EclipseLinkExceptionTranslatorTests { |
||||
|
||||
@Test |
||||
public void wrongException() { |
||||
EclipseLinkExceptionTranslator exceptionTranslator = new EclipseLinkExceptionTranslator(); |
||||
assertNull(exceptionTranslator.translateExceptionIfPossible(new IllegalArgumentException())); |
||||
} |
||||
|
||||
@SuppressWarnings("ThrowableResultOfMethodCallIgnored") |
||||
@Test |
||||
public void eclipseLinkException() { |
||||
EclipseLinkExceptionTranslator exceptionTranslator = new EclipseLinkExceptionTranslator(); |
||||
assertNotNull(exceptionTranslator.translateExceptionIfPossible(DatabaseException.databaseAccessorNotConnected())); |
||||
assertNotNull(exceptionTranslator.translateExceptionIfPossible( |
||||
DatabaseException.databaseAccessorNotConnected())); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
import org.eclipse.persistence.exceptions.DatabaseException; |
||||
import org.hibernate.HibernateException; |
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* @author Jan Stamer |
||||
*/ |
||||
@SuppressWarnings("serial") |
||||
public class EclipseLinkSystemExceptionTests { |
||||
|
||||
@Test |
||||
public void withNull() { |
||||
EclipseLinkSystemException exception = new EclipseLinkSystemException(null); |
||||
assertNull(exception.getCause()); |
||||
assertNull(exception.getMessage()); |
||||
} |
||||
|
||||
@Test |
||||
public void createWithCause() { |
||||
DatabaseException dbExceptionWithCause = new DatabaseException("my custom exception cause") { |
||||
}; |
||||
EclipseLinkSystemException elSystemException = new EclipseLinkSystemException(dbExceptionWithCause); |
||||
assertEquals(dbExceptionWithCause, elSystemException.getCause()); |
||||
assertTrue(elSystemException.getMessage().contains("my custom exception cause")); |
||||
} |
||||
|
||||
@Test |
||||
public void createWithNullCause() throws HibernateException { |
||||
DatabaseException dbExceptionWithCause = new DatabaseException((String) null) { |
||||
}; |
||||
EclipseLinkSystemException elSystemException = new EclipseLinkSystemException(dbExceptionWithCause); |
||||
assertEquals(dbExceptionWithCause, elSystemException.getCause()); |
||||
assertTrue(elSystemException.getMessage().contains("null")); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
/* |
||||
* Copyright 2002-2014 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.orm.eclipselink; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
import org.eclipse.persistence.exceptions.DatabaseException; |
||||
import org.junit.Test; |
||||
|
||||
/** |
||||
* @author Jan Stamer |
||||
*/ |
||||
public class EclipseLinkUtilsTests { |
||||
|
||||
@Test |
||||
public void withNull() { |
||||
assertNotNull(EclipseLinkUtils.convertEclipseLinkAccessException(null)); |
||||
} |
||||
|
||||
@Test |
||||
public void testWithEclipseLinkException() { |
||||
assertNotNull(EclipseLinkUtils.convertEclipseLinkAccessException( |
||||
DatabaseException.databaseAccessorNotConnected())); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue