[Seasar-user:10676] 【S2Dxo】リストの中身がコピーできない現象について

ryota [E-MAIL ADDRESS DELETED]
2007年 9月 21日 (金) 17:58:00 JST


お世話になります。良太と申します。

それぞれ違う型のオブジェクトが入るリストを持つ2つのオブジェク
トをS2Dxoを使用してリストの中身までコピーしたいと考えています。

下記の内容で実行すると、リストの中身がコピーされずに
ClassCastExceptionで落ちてしまいます。

お手数ですが、解決方法をご教授いただけませんでしょうか?
それともそもそも無理なのでしょうか?

【コピー元オブジェクト】
//親Entity 子Entityのリストを持つ
public class ParentEntity implements Serializable {

    private String name;

    private List<ChildEntity> childList;

    //getter/setterは省略
}

//子Entity
public class ChildEntity implements Serializable {

    private String name;

    //getter/setterは省略
}

【コピー先オブジェクト】
//親DTO 子DTOのリストを持つ
public class ParentDto implements Serializable{

    private String name;

    private List<ChildDto> childList;

    //getter/setterは省略
}

//子DTO
public class ChildDto implements Serializable{

    private String name;

    //getter/setterは省略
}

【変換DXO】
親を渡して親を受け取る。その際、子供のListの中身も
コピーされていたい。

//DXO
public interface ParentDxo {
    public ParentDto comvert(ParentEntity parentEntity);
}

【テストクラス】

    public void testConvert(){
        ChildEntity childEntity = new ChildEntity();
        childEntity.setName("子");

        ParentEntity parentEntity = new ParentEntity();
        parentEntity.setName("親");

        List<ChildEntity> childEntityList = new ArrayList<ChildEntity>();
        childEntityList.add(childEntity);
        parentEntity.setChildList(childEntityList);

        ParentDto parentDto = parentDxo.comvert(parentEntity);

        assertEquals("親", parentDto.getName());
        assertEquals("子",
parentDto.getChildList().get(0).getName());//←ここで下記の例外が発生
    }




java.lang.ClassCastException: xxxx.ChildEntity cannot be cast to xxxx.ChildDto
	at xxxx.ParentDxoTest.testConvert(ParentDxoTest.java:40)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:294)
	at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
	at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:190)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:228)
	at junit.framework.TestSuite.run(TestSuite.java:223)
	at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)



Seasar-user メーリングリストの案内