Javaインタフェース投げる:Kotlin EJBでUndeclaredThrowableException
public interface IUserSettingManager {
UserSettingApi updateSetting(Long userId, UserSetting userSettingNew) throws FailUpdateUserSettingException;
}
Kotlin EJB:例外と
@Stateless
@Local(IUserSettingManager::class)
open class UserSettingManager : DataManager(), IUserSettingManager {
private companion object {
private val LOG = LoggerFactory.getLogger(UserSettingManager::class.java)
}
@Throws(FailUpdateUserSettingException::class)
private fun validate(userSetting: UserSetting) {
if (userSetting.avatar?.length ?: 0 > DBConstant.UUID_VARCHAR_SIZE) {
throw FailUpdateUserSettingException("avatar length")
}
}
@Throws(FailUpdateUserSettingException::class)
override fun updateSetting(userId: Long, userSettingNew: UserSetting): UserSettingApi {
val logger = LOG.silentEnter("updateSetting")
try {
validate(userSettingNew)
.....
} catch (ex: Exception) {
val msg = "userId:$userId, user setting:$userSettingNew"
when (ex) {
is FailUpdateUserSettingException -> {
logger.debug("$msg, ex:$ex")
throw ex
}
else -> {
logger.error(msg, ex)
throw FailUpdateUserSettingException(ex.toString())
}
}
}
}
}
Javaクラス:
パブリッククラスFailUpdateUserSettingExceptionがExceptiを拡張不正なデータを持つ{
public FailUpdateUserSettingException() {
this(error);
}
}
ときにトライコールEJB上、例外でUndeclaredThrowableExceptionを取得し、その結果、トランザクションが
Caused by: java.lang.reflect.UndeclaredThrowableException
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:34)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.interceptors.NonPooledEJBComponentInstanceAssociatingInterceptor.processInvocation(NonPooledEJBComponentInstanceAssociatingInterceptor.java:59) [wildfly-ejb3-10.0.0.Final.jar:10.0.0.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:254) [wildfly-ejb3-10.0.0.Final.jar:10.0.0.Final]
... 137 more
Caused by: com.pay.utils.shared.exception.user.FailUpdateUserSettingException: Fail update user setting. avatar length
at com.pay.manager.UserSettingManager.validate(UserSettingManager.kt:xx)
at com.pay.manager.UserSettingManager.updateSetting(UserSettingManager.kt:xx)
at com.pay.manager.UserSettingManager.updateSetting(UserSettingManager.kt:xx)
.....
結果
するjavax.ejb圧延.EJBTransactionRolledbackException
関連:[なぜKotlinがParseExceptionではなくそのようなUndeclaredThrowableExceptionを受け取るのですか?](https://stackoverflow.com/questions/44788906/why-kotlin-receives-such-an-undeclaredthrowableexception-rather-than-a-parseexce/44790753#44790753) –
この問題を回避するにはどうすればよいですか? 関数が自分で書き込んだ場合、その解決法はとても簡単です。はい、関数がチェック例外をスローしていると宣言します。例えば: @throws(はParseException ::クラス) 楽しいconvertToDate(){/ ** /} **私のために動作しません。** – Ant20
なぜあなたのために働くしませんでしたか? –