[seasar-dotnet:469] Re: 数字を含む引数をDaoのメソッドに渡すとJScriptEvaluateRuntimeExceptionが発生する

Kazuya Sugimoto sugimotokazuya @ gmail.com
2007年 3月 2日 (金) 18:22:39 JST


杉本です。

西方さん、すいません。反応が遅くなりました。
# いろいろとスタートするものがありまして・・

調査してみます。

# が、正規表現は苦手なのでコミッタの方々助けてください・・orz

07/02/27 に Akira Nishikata さんは書きました:
> お世話になっております。西方と申します。
> S2Container.NET 1.2.8.0
> S2Dao.NET 1.0.3.0
> を使用しています。
>
> 現在、Daoインターフェースに以下のようなメソッドを定義しています。
> --------------------------------------------------------------------------------
> [Seasar.Dao.Attrs.Sql("select * from shop_OrderDetail /*BEGIN*/ where /*IF par1am.HasValue*/ order_detail_id = 1 /*END*/ /*END*/")]
> IList SelectListByIncludeNumberParam(Nullables.NullableDecimal par1am);
> --------------------------------------------------------------------------------
>
> ここで上記メソッドを呼び出すとJScript.NETから下記のような例外が帰ってきます。
> --------------------------------------------------------------------------------
> Seasar.Framework.Exceptions.JScriptEvaluateRuntimeException: [ESSR0073]JScriptException occured, because self.GetArg('par1am') self.GetArg('.HasValue')
>
> 場所 Seasar.Framework.Util.JScriptUtil.Evaluate(String exp, Hashtable ctx, Object root)
> 場所 Seasar.Dao.Node.AbstractNode.InvokeExpression(String expression, ICommandContext ctx)
> 場所 Seasar.Dao.Node.IfNode.Accept(ICommandContext ctx)
> 場所 Seasar.Dao.Node.ContainerNode.Accept(ICommandContext ctx)
> 場所 Seasar.Dao.Node.BeginNode.Accept(ICommandContext ctx)
> 場所 Seasar.Dao.Node.ContainerNode.Accept(ICommandContext ctx)
> 場所 Seasar.Dao.Impl.SelectDynamicCommand.Execute(Object[] args)
> 場所 XXX.Dao.Allcommon.s2dao.S2DaoInterceptor.Invoke(IMethodInvocation invocation) 場所 S2DaoInterceptor.cs:行 107
> 場所 Seasar.Framework.Aop.Proxy.AopProxy.Invoke(IMessage msg)
> 場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
> 場所 XXX.Dao.Exdao.ShopOrderDetailDao.SelectListByIncludeNumberParam(NullableDecimal par1am)
> 場所 XXXTest.S2Dao.QueryAnnotationTest.SelectListByNumberIncludeParamTest() 場所 QueryAnnotationTest.cs:行 35
>
> System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。
>
> 場所 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
> 場所 System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
> 場所 Seasar.Framework.Util.JScriptUtil.Evaluate(String exp, Hashtable ctx, Object root)
>
> Microsoft.JScript.JScriptException: ';' が必要です。
>
> eval code: 行 1 - エラー: ';' が必要です。
> --------------------------------------------------------------------------------
>
> どうやらDaoインターフェースの引数か、テーブル名に数字が含まれている場合、上記の例外が発生するようです。
>
> 問題の箇所は、Seasar.Dao.Node.ExpressionUtilの
> --------------------------------------------------------------------------------
>  reSym = new Regex(@"^\s*(\-?\b*[_a-zA-Z.']+[_a-zA-Z0-9\[()\]]*)", RegexOptions.Compiled);
> --------------------------------------------------------------------------------
> の正規表現部分だと思うのですが、、
>
> 以上よろしくお願いいたします。
>
> -----------------------------------------
> 株式会社ビルドシステム 業務システム開発部
>
> 西方 彬 <nishikata.a @ buildsystem.jp>
> -----------------------------------------
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


-- 
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/


seasar-dotnet メーリングリストの案内