[Seasar-user:13146] [S2Container] ConversionRuleを定義したDxoが動かなくなりました.
Applied_MATSUDA Masaaki
[E-MAIL ADDRESS DELETED]
2008年 3月 4日 (火) 12:42:36 JST
TigerCatです.お世話になっております.
S2Container を2.4.17から2.4.18以降(最新版2.4.23も含む)へ差し替えたところ,
いままで動いていたDxoがExceptionを吐くようになってしまいました.
Dxoのコードはこんなふうです.
@ConversionRule("testEntityHead.productCode : productCode,
testEntityHead.status : status")
void convert(TestDto testDto, TestEntityDetail testEntityDetail);
Dtoから外部キーを持つEntityへ放り込むかんじです.
TestEntityDetail のフィールドとして TestEntityHead を持つかたちになっています.
TestEntityDetailのコードはこんなふうです.
@ManyToOne
@JoinColumn(name="HEAD_PRODUCT_CODE", referencedColumnName="PRODUCT_CODE")
private TestEntityHead testEntityHead;
@Id
@Column(name="ID", length=32)
private String id;
@Column(name="PRODUCT_NAME", nullable=false, length=128)
private String productName;
public TestEntityHead getTestEntityHead() {
return testEntityHead;
}
public void setTestEntityHead(TestEntityHead testEntityHead) {
this.testEntityHead = testEntityHead;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
これのマスターテーブルが TestEntityHead です.
コードはこんなかんじです.
@Id
@Column(name="PRODUCT_CODE", nullable=false, length=10)
private String productCode;
@Column(name="STATUS", nullable=false)
private Integer status;
@OneToMany(mappedBy="testEntityHead")
private Collection<TestEntityDetail> testEntityDetails;
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Collection<TestEntityDetail> getTestEntityDetails() {
return testEntityDetails;
}
public void setTestEntityDetails(Collection<TestEntityDetail> testEntityDetails) {
this.testEntityDetails = testEntityDetails;
}
Dtoのコードは,
public String productCode;
public String productName;
public Integer status;
となっており,
適当な検証コードが,
public static void main(String[] args) {
SingletonS2ContainerFactory.setConfigPath("app_test.dicon");
SingletonS2ContainerFactory.init();
TestDxo testDxo = SingletonS2Container.getComponent(TestDxo.class);
TestDto testDto = new TestDto();
testDto.productCode = "12345";
testDto.productName = "あいうえお";
testDto.status = 5;
TestEntityDetail testEntityDetail = new TestEntityDetail();
testEntityDetail.setTestEntityHead(new TestEntityHead());
testDxo.convert(testDto, testEntityDetail);
System.out.println( "productName: " + testEntityDetail.getProductName());
System.out.println( "productCode: " +
testEntityDetail.getTestEntityHead().getProductCode());
}
ひととおりのテストコードは以上な具合です.
いざ実行しますと,
末尾に貼り付けたような例外を発生します.
「理由はcom.appliedjapan.sato.casemgr.dto.TestDto.testEntityHead」
といっているようですが,何故にDtoのほうを見にいっちゃうんでしょうか?
関連する完全なソースは添付いたしました.
test_app.dicon は入れていませんが,基本的にDoltengが作ってくれたもの
からTeeda関連を抜いたものとなっております.
2.4.18ぐらいからDxoもいろいろ修正が入っているようなのですが,関連
しそうなところ追いきれませんでした・・・
(こちらのEntityの作りがおかしいのかもですけど)
なにとぞよろしくお願いいたします.
----- スタックトレース
2008-03-04 12:31:00,204 [main] INFO
org.seasar.framework.container.factory.SingletonS2ContainerFactory - Running on
[ENV]ct, [DEPLOY MODE]Hot Deploy
2008-03-04 12:31:00,220 [main] DEBUG
org.seasar.framework.container.util.S2ContainerUtil - クラス
(com.appliedjapan.sato.casemgr.dxo.TestDxo[testDxo])のコンポーネント定義を登録します
1:
2008-03-04 12:31:00,220 [main] DEBUG
org.seasar.framework.aop.interceptors.TraceInterceptor - BEGIN
com.appliedjapan.sato.casemgr.dxo.TestDxo#convert([E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED])
2008-03-04 12:31:00,236 [main] DEBUG
org.seasar.framework.aop.interceptors.TraceInterceptor - END
com.appliedjapan.sato.casemgr.dxo.TestDxo#convert([E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED])
Throwable:org.seasar.framework.exception.OgnlRuntimeException: [ESSR0073]OGNLで
例外が発生しました。理由はcom.appliedjapan.sato.casemgr.dto.TestDto.testEntityHead
Exception in thread "main" org.seasar.framework.exception.OgnlRuntimeException:
[ESSR0073]OGNLで例外が発生しました。理由は
com.appliedjapan.sato.casemgr.dto.TestDto.testEntityHead
at org.seasar.framework.util.OgnlUtil.getValue(OgnlUtil.java:100)
at org.seasar.framework.util.OgnlUtil.getValue(OgnlUtil.java:62)
at org.seasar.framework.util.OgnlUtil.getValue(OgnlUtil.java:47)
at org.seasar.extension.dxo.util.OgnlExpression.evaluate(OgnlExpression.java:53)
at
org.seasar.extension.dxo.converter.impl.ConversionContextImpl.<init>(ConversionContextImpl.java:178)
at
org.seasar.extension.dxo.command.impl.AbstractDxoCommand.createContext(AbstractDxoCommand.java:126)
at
org.seasar.extension.dxo.command.impl.BeanToBeanDxoCommand.convertScalar(BeanToBeanDxoCommand.java:70)
at
org.seasar.extension.dxo.command.impl.AbstractDxoCommand$ScalarConversionHelper.convert(AbstractDxoCommand.java:223)
at
org.seasar.extension.dxo.command.impl.AbstractDxoCommand.execute(AbstractDxoCommand.java:78)
at org.seasar.extension.dxo.DxoInterceptor.invoke(DxoInterceptor.java:57)
at
com.appliedjapan.sato.casemgr.dxo.TestDxo$$EnhancedByS2AOP$$10bbd42$$MethodInvocation$$convert0.proceed(MethodInvocationClassGenerator.java)
at
org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
at
com.appliedjapan.sato.casemgr.dxo.TestDxo$$EnhancedByS2AOP$$10bbd42$$MethodInvocation$$convert0.proceed(MethodInvocationClassGenerator.java)
at
com.appliedjapan.sato.casemgr.dxo.TestDxo$$EnhancedByS2AOP$$10bbd42.convert(TestDxo$$EnhancedByS2AOP$$10bbd42.java)
at com.appliedjapan.sato.casemgr.logic.DxoTest.main(DxoTest.java:27)
Caused by: ognl.NoSuchPropertyException:
com.appliedjapan.sato.casemgr.dto.TestDto.testEntityHead
at ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:122)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1758)
at ognl.ASTProperty.getValueBody(ASTProperty.java:92)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)
at ognl.SimpleNode.getValue(SimpleNode.java:211)
at ognl.ASTChain.getValueBody(ASTChain.java:109)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)
at ognl.SimpleNode.getValue(SimpleNode.java:211)
at ognl.ASTMap.getValueBody(ASTMap.java:90)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:171)
at ognl.SimpleNode.getValue(SimpleNode.java:211)
at ognl.Ognl.getValue(Ognl.java:333)
at ognl.Ognl.getValue(Ognl.java:413)
at ognl.Ognl.getValue(Ognl.java:395)
at org.seasar.framework.util.OgnlUtil.getValue(OgnlUtil.java:97)
... 14 more
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: Test.zip
型: application/x-zip-compressed
サイズ: 3745 バイト
説明: 無し
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080304/9e8c3cff/attachment-0001.bin
Seasar-user メーリングリストの案内