Forums: Open Discussion (Thread #26184)

illegal argument:propNameエラーについて (2010-05-05 06:01 by Anonymous #50392)

現在、TERASOLUNA ServerFW Java(Web版)を利用しています。

クライアントからpostされたリクエストに対し、BLogicクラス内で、ActionFormを経由してリクエストパラメータを取得するため、以下のように記述しました。

[blogic-io.xml]
<action path="/aaa/bbb">
<blogic-params bean-name="aaa.bbb.CCCInputParam">
<set-property property="requestParameter1" blogic-property="requestParameter1" source="form" />
<set-property property="requestParameter2" blogic-property="requestParameter2" source="form" />
</blogic-params>
<blogic-result>
</blogic-result>
</action>

[BLogicクラス]
public BLogicResult execute(CCCInputParam inputParam) {

String requestParameter1 = inputParam.getRequestParameter1();
String requestParameter2 = inputParam.getRequestParameter2();
}

ところが、requestParameter1は正常に値を取得できるのに対し、requestParameter2は以下のエラーが出力し、正常に値が取得できません。

[2010/05/05 05:29:59][DEBUG][AbstractBLogicAction] *** doExecute() called. action path=[/aaa/bbb] ***
[2010/05/05 05:29:59][ERROR][BLogicMapper] illegal argument:propName = [requestParameter2]
[2010/05/05 05:29:59][ERROR][AbstractBLogicMapper] exception is thrown out by invokeMethod.
[2010/05/05 05:29:59][DEBUG][SpringMessageResources] key:[errors.blogic.mapper.getvalue] locale:[ja_JP] message:[データの受け取り元から値を取得できませんでした:{0}.]
[2010/05/05 05:29:59][ERROR][SystemExceptionHandler] sessionHash = B83CBFE8D6A4D558FE433ADFFA2D4A52768168CA
[2010/05/05 05:29:59][ERROR][SystemExceptionHandler] jp.terasoluna.fw.exception.SystemException: データの受け取り元から値を取得できませんでした:requestParameter2.


コードはチェックしましたがあやしいところは見つからず、原因がわからず困っています。
このような事象から考えられる原因について、ご教授いただけますでしょうか?
または、ActionForm経由ではなく、リクエストのbodyをまるごと取得する方法がありましたら、ご教授いただけますでしょうか?
(requestParameter2はあるデータをzip圧縮,base64エンコード,URLエンコードされたデータであり、ActionForm経由で扱えない可能性を考えています。)

ご回答よろしくお願いします。

Reply to #50392×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-07 15:34 by taromaru #50451)

ログはスタックトレースも貼り付けてください。

アクションフォームから取得する設定で、
値を取得できないケースでは、
・アクションフォームにプロパティrequestParameter2が定義されていない
という可能性が高いと思います。
(この場合、スタックトレースには、
「Caused by: java.lang.NoSuchMethodException: Unknown property 'requestParameter2'」が含まれます。)
Reply to #50392

Reply to #50451×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-08 23:04 by Anonymous #50479)

ご回答ありがとうございます。

ご指摘いただいたように、上記ログの後に以下のスタックトレースが出力されています。


------------------------------------------------------------------------
at jp.terasoluna.fw.service.thin.AbstractBLogicMapper.setParams(AbstractBLogicMapper.java:255)
at jp.terasoluna.fw.service.thin.AbstractBLogicMapper.mapBLogicParams(AbstractBLogicMapper.java:182)
at jp.terasoluna.fw.web.struts.actions.AbstractBLogicAction.getBLogicParams(AbstractBLogicAction.java:526)
at jp.terasoluna.fw.web.struts.actions.AbstractBLogicAction.doExecute(AbstractBLogicAction.java:254)
at jp.terasoluna.fw.web.struts.actions.ActionEx.execute(ActionEx.java:221)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at jp.terasoluna.fw.web.struts.action.RequestProcessorEx.process(RequestProcessorEx.java:149)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Caused by: jp.terasoluna.fw.service.thin.BLogicMapperException: java.lang.reflect.InvocationTargetException
... 24 more
Caused by: java.lang.reflect.InvocationTargetException
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:597)
at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216)
at jp.terasoluna.fw.service.thin.AbstractBLogicMapper.setParams(AbstractBLogicMapper.java:241)
... 23 more
Caused by: jp.terasoluna.fw.util.PropertyAccessException: java.lang.NoSuchMethodException: Unknown property 'requestParameter2'
at jp.terasoluna.fw.util.BeanUtil.getBeanProperty(BeanUtil.java:87)
at jp.terasoluna.fw.service.thin.BLogicMapper.getValueFromForm(BLogicMapper.java:157)
... 29 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'requestParameter2'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
at jp.terasoluna.fw.util.BeanUtil.getBeanProperty(BeanUtil.java:79)
... 30 more
------------------------------------------------------------------------

アクションフォームにもrequestParameter1と同じようにrequestParameter2が定義されています。
ただ気になる点は、requestParameter2はrequestParameter1と違い、実際のパラメータ名は以下のように英字の大文字、小文字が入り混じっています。
(仮のパラメータ名):(実際のパラメータ名)
requestParameter1:AB
requestParameter2:AbCde

このパラメータ名は他のサイトからPOSTされてくるパラメータ名であるため、変更することができないのですが、以下の確認を行ってみました。

■確認内容
アクションフォーム、blogic-aaa-io.xmlのパラメータ名をAbCdeからABCDEへ変更する。

■結果
以下のエラーが出力しました。
blogic-aaa-io.xmlで指定しているパラメータ名とアクションフォームで指定しているパラメータ名が、大文字、小文字が入り混じっているため、正しく認識できていないように思えるのですが、もし解決手段などありましたらご教授いただけますでしょうか?


------------------------------------------------------------------------
[2010/05/08 22:33:24][DEBUG][AbstractBLogicAction] *** doExecute() called. action path=[/aaa/bbb] ***
[2010/05/08 22:33:24][DEBUG][AbstractBLogicAction] *** BLogicParams is prepared. ***
[2010/05/08 22:33:24][DEBUG][AbstractBLogicAction] BLogicParams:aaa.dto.bbb@92997e
[2010/05/08 22:33:24][DEBUG][AbstractBLogicAction] *** starting blogic action[jp.terasoluna.fw.web.struts.actions.BLogicAction] ***
[2010/05/08 22:33:24][DEBUG][BLogicAction] *** doExecuteBLogic() called. ***
[2010/05/08 22:33:24][DEBUG][BLogicAction] *** Starting blogic[aaa.blogic.bbbBLogic]. ***
java.lang.NullPointerException
at aaa.blogic.bbbBLogic.execute(bbbBLogic.java:48)
at aaa.blogic.bbbBLogic.execute(bbbBLogic.java:1)
at jp.terasoluna.fw.web.struts.actions.BLogicAction.doExecuteBLogic(BLogicAction.java:137)
at jp.terasoluna.fw.web.struts.actions.AbstractBLogicAction.doExecute(AbstractBLogicAction.java:278)
at jp.terasoluna.fw.web.struts.actions.ActionEx.execute(ActionEx.java:221)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at jp.terasoluna.fw.web.struts.action.RequestProcessorEx.process(RequestProcessorEx.java:149)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)




Reply to #50392

Reply to #50479×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-10 10:19 by taromaru #50488)

> (仮のパラメータ名):(実際のパラメータ名)
> requestParameter1:AB
> requestParameter2:AbCde
実際のパラメータ名「AbCde」が原因です。
JavaBeanの規約上、存在できないプロパティ名です。
# プロパティ名:setter/getter
# xxx :setXxx/getXxx
# XXx :setXXx/getXXx (連続する大文字で始まるプロパティ名)
仮にsetAbCde/getAbCdeを定義していた場合、
そのプロパティ名は「AbCde」ではなく「abCde」であるとみなされます。

「AbCde」というパラメータ名が変更できないということですので、
対応方法は以下のようになります。
・アクションフォームは動的アクションフォーム(struts-configにプロパティを記述するアクションフォーム)にする
(動的アクションフォームは、JavaBeanではないため、「AbCde」というプロパティが存在可能です)
・blogic-io.xmlで、「property="AbCde"」と書いているところに「blogic-property="abCde"」も書く
(DTOがJavaBeanである場合、全く同じ理由で、「AbCde」というプロパティは存在できないため、「setAbCde」「getAbCde」と対応が取れる「abCde」というプロパティ名に変換する)
Reply to #50392

Reply to #50488×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-12 00:52 by Anonymous #50528)

ご回答ありがとうございます。
以下のように設定しましたが、状況は変わらず、 "java.lang.NoSuchMethodException: Unknown property 'AbCde'"が出力してしまいます。
いただいた内容を理解しきれていないのだと思いますが、設定上、間違えている点などご指摘いただけると幸いです。

■blogic-io.xml(抜粋)
<action path="/aaa/bbb">
<!-- 入力クラスの設定 -->
<blogic-params
bean-name="aaa.dto.bbbInput">
<set-property property="AB" blogic-property="AB" source="form" />
<set-property property="AbCde" blogic-property="abCde" source="form" />
</blogic-params>

■aaa.dto.bbbInput.java(抜粋)
private String AbCde= null;

public String getAbCde() {
return AbCde;
}

public void setAbCde(String AbCde) {
this.AbCde= AbCde;
}

■aaa.form.bbbForm.java(抜粋)
private String abCde= null;

public String getAbCde() {
return abCde;
}

public void setAbCde(String abCde) {
this.abCde= abCde;
}

■struts-config.xml(抜粋)
<!-- 結果用アクションフォーム -->
<form-bean name="_bbbForm"
type="aaa.form.bbbForm" />
</form-beans>
<!-- 結果処理用アクション -->
<action path="/aaa/bbb"
name="_bbbForm" scope="session"
validate="true" input="/aaa/bbb">
<forward name="success" path="/aaa/bbbSCR.do" />
</action>
Reply to #50392

Reply to #50528×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-12 09:53 by taromaru #50538)

私が書いた対応のうち、
> ・アクションフォームは動的アクションフォーム(struts-configにプロパティを記述するアクションフォーム)にする
> (動的アクションフォームは、JavaBeanではないため、「AbCde」というプロパティが存在可能です)
が出来ていない状態です。
struts-config.xmlの
<form-bean name="_bbbForm"
type="aaa.form.bbbForm" />
となっている部分を、
<form-bean name="_bbbForm"
type="jp.terasoluna.fw.web.struts.form.DynaValidatorActionFormEx">
<form-property name="AbCde" type="java.lang.String"/>
(aaa.form.bbbForm.javaに定義されている全てのプロパティを同様に記述)
</form-bean>
としてください。
プロパティを定義し終わったら、
aaa.form.bbbForm.javaは不要になるので、削除してください。
Reply to #50528

Reply to #50538×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: illegal argument:propNameエラーについて (2010-05-15 12:16 by Anonymous #50606)

ご回答ありがとうございました。
いただきました設定にてAbCdeのような大文字小文字が入り混じったプロパティを取得することができました。
ご対応ありがとうございました。
Reply to #50392

Reply to #50606×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login