なんとかならんかねぇ


さて、XMLを読み込んだあたりでどうもうまくいかないのが気に入らない。


Exceptionの内容:

junit.framework.AssertionFailedError: Exception in constructor: testUpdate (org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [D:\\eclipse\workspace\Hoge\src\java\conf\domain\transactionTest.xml]: Instantiation of bean failed; nested exception is java.lang.SecurityException: sealing violation: can't seal package javax.transaction: already loaded

java.lang.SecurityException: sealing violation: can't seal package javax.transaction: already loaded
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:234)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
 at jp.co.dgic.testing.common.DJUnitTestCaseClassLoader.findClass(DJUnitTestCaseClassLoader.java:104)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
 at jp.co.dgic.testing.common.DJUnitTestCaseClassLoader.loadClass(DJUnitTestCaseClassLoader.java:85)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
 at java.lang.Class.getDeclaredMethods0(Native Method)
 at java.lang.Class.privateGetDeclaredMethods(Class.java:1655)
 at java.lang.Class.getDeclaredMethods(Class.java:1139)
 at java.beans.Introspector$1.run(Introspector.java:1273)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1271)
 at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1136)
 at java.beans.Introspector.getBeanInfo(Introspector.java:378)
 at java.beans.Introspector.getBeanInfo(Introspector.java:152)
 at org.springframework.beans.CachedIntrospectionResults.(CachedIntrospectionResults.java:140)
 at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:82)
 at org.springframework.beans.BeanWrapperImpl.setIntrospectionClass(BeanWrapperImpl.java:305)
 at org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:263)
 at org.springframework.beans.BeanWrapperImpl.setWrappedInstance(BeanWrapperImpl.java:237)
 at org.springframework.beans.BeanWrapperImpl.(BeanWrapperImpl.java:181)
 at org.springframework.beans.factory.support.AbstractBeanFactory.createBeanWrapper(AbstractBeanFactory.java:438)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:273)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:223)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:236)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:159)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:255)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:317)
 at org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:82)
 at org.springframework.context.support.FileSystemXmlApplicationContext.(FileSystemXmlApplicationContext.java:67)
以下略

java.lang.SecurityException: sealing violation: can't seal package javax.transaction: already loaded

セキュリティの問題なのかなぁ。

発生個所はコンストラクタでspringの設定を読み込んでいるところ。

context = new FileSystemXmlApplicationContext(BEANCONFIGS);

それともXMLのパーサーまわりなんじゃろか・・・。
http://www.newatlanta.com/c/products/servletexec/self_help/faq/doPrintSearch :ここの143番
http://www.en8848.com/Reilly%20Books/xml/jxslt/ch09_01.htm
http://java.sun.com/docs/books/tutorial/ext/security/sealing.html

sealというのがよく分からない。
Java のコード署名モデルに関する議論*1

6.2. JDK1.2 における Sealed Jar ファイル[SealedJar]

ああ、manifestの記述のことか。うーん、結構コアな問題だなぁ。

djunit.jarにはMANIFESTは含まれていないので、自分で作って(おい)みる。
内容はこれだけ。

Manifest-Version: 1.0
Sealed: true


実行・・・効果なしOrz


ふと、テストメソッドを一つだけ選択して実行してみた。
JUnitからはOK。
djUnitからは失敗だが・・・

junit.framework.AssertionFailedError: Could not create test 'testUpdate'
 at junit.framework.Assert.fail(Assert.java:47)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner$2.runTest(RemoteTestRunner.java:515)
 at junit.framework.TestCase.runBare(TestCase.java:127)
 at junit.framework.TestResult$1.protect(TestResult.java:106)
 at junit.framework.TestResult.runProtected(TestResult.java:124)
 at junit.framework.TestResult.run(TestResult.java:109)
 at junit.framework.TestCase.run(TestCase.java:118)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:436)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:311)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at jp.co.dgic.testing.common.DJUnitTestCaseClassLoader.main(DJUnitTestCaseClassLoader.java:136)
 at jp.co.dgic.eclipse.jdt.internal.junit.runner.DJUnitRunner.main(DJUnitRunner.java:37)


なんでエラーの内容が違うんだyp。


とりあえず、続く(たぶん)。