[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 メーリングリストの案内