問題タブ [mvel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - サンドボックスでユーザー式を評価する方法
JSON ファイルから読み取る、信頼されていないユーザーからの式をアプリで評価したいと考えています。そのような:
StackOverflow で、これに関する多くのスレッドを見つけました。通常は、JavaScript を読み取ることができる Java 独自の ScriptEngine クラスを使用することをお勧めします。または、JEXL、MVEL、または次のリストにあるその他の既存のライブラリを使用することをユーザーに推奨します: http://java-source.net/open-source/expression-languages
しかし、それらはすべて信頼できるユーザーに依存しているようです (例: 自分で作成し、その中でスクリプトを実行したい構成ファイル)。しかし、私の場合、式の評価を安全なサンドボックスで実行したいと考えています。したがって、ユーザーは次のような単純なことはできません。
アプリをロックしたり、不要なリソースにアクセスしたりします。
1) セーフ ボックスで実行できるように簡単に構成できる既存のライブラリはありますか? 「簡単に」とは、独自の式エバリュエーターを作成するよりも高速に使用できる高レベルの構成 API を意味します。私自身の調査を少し行った後、JEXL と MVEL の両方が出ているようです。
2) または、信頼できないユーザーが悪用できないように非常に単純な既存の表現言語はありますか? 私が見つけたものはすべて非常に複雑で、ループや import ステートメントなどを実装しています。必要なのは、数学、論理演算子、および独自に定義した変数とメソッドを解析することだけです。それ以上のものは私の範囲外です。
3) 唯一の解決策が独自の式エバリュエーターを作成することである場合、一貫したセキュリティ モデルを作成する方法に関するガイダンスはどこにありますか? 私はこれに不慣れで、コードインジェクションに使用される一般的なトリックが何であるかわかりません。だからこそ、これを自分で書く必要は避けたかったのです。
java - Velocity や Mvel に比べて Stringtemplate のパフォーマンスが低い
テンプレートフレームワークの評価をしようとしています。
簡単なパフォーマンス テストのために、これらのテンプレートを使用しています。
Stringtemplate の部分は
そして結果は
文字列テンプレートがわからないので、ここに私の質問があります:
StringTemplate は本当に遅いですか、それともテンプレートをレンダリングする他の (より高速な) 方法がありますか。
アップデート:
vars は次のようになります。
現在、テンプレートごとに 1.000.000 回の反復があり、ベンチマーク全体を 10 回ループしています
elasticsearch - Elasticsearchカスタムスクリプトフィールドを使用して、param配列にIDが存在するかどうかを確認します
ブール値であり、パラメータとして送信される配列にドキュメントのIDが存在する場合にtrueを返すカスタムスクリプトフィールドを追加することは可能ですか?
このようなものhttps://gist.github.com/2437370
mvelでこれを行う正しい方法は何でしょうか?
更新: Imotovの回答で指定されているように動作させるのに問題があります。
マッピング:
選別:
:sort=>{:_script=>{:script=>"return friends_visits_ids.contains(_fields._id.value)", :type=>"string", :params=>{:friends_visits_ids=>["4f8d425366eaa71471000011"]}, :order=>"asc"}}}
place: {
properties: {
_id: { index: "not_analyzed", store: "yes" },
}
}
エラーは発生しません。ドキュメントが正しく並べ替えられません。
アップデート2
ああ、そして私はこれを文書に戻します:
"sort"=>["false"]
java - MVEL のパラメータのランタイム値で式を取得する
MVEL を使用して、数式である式を実行しています。式はこの形式です
10 *利用可能SI
ゲッターとセッターを持つパラメーターとして availableSI を持つ DataObject があります。
MVEL.eval(expression,DataObject) と言うと、dataobject から availableSI の値を見つけて式を実行し、最終結果を返します。
ただし、使用可能なSIのランタイム値を持つ式が必要です(avaiableSIが1000の場合)、10 * 1000
助けが必要。
el - EL式の自由変数をリストする
プログラム構成に使用されるEL評価を含むアプリケーションがあります。EL式が与えられた場合、実際に評価せずに、それに含まれる自由変数を取得したいと思います。目的は、エンドユーザーが「評価」ボタンを押す前に値を自由変数にバインドできるUIを提供することです。
残念ながらjavax.el.ValueExpression
、この機能は提供されていないため、ベンダー固有のAPIを使用する必要がある場合があります。開発のかなり早い段階なので、実装の選択はまだ修正していません。私はMVEL、JUEL、SpELについて考えましたが、もちろん、私が選択したものはすべて、上記で説明した機能を備えている必要があります。
mvel - MVEL 評価コンテキストを作成するにはどうすればよいですか?
次のように MVEL を順次解析したい:
これは可能ですか?もしそうなら、どのように?
java - MVEL 関数の定義と再利用
MVEL を使用してカスタムのプリコンパイル済み関数を定義し、その関数を別のコンパイル済み式で使用することはできますか? 次のことを試してみると:
Exception in thread "main" [Error: duplicate function: hello]
2回目に実行しようとすると取得します。
式自体ではなく、何らかのコンテキストで関数を宣言する必要があるようです。しばらく ParsedContext で遊んでいましたが、常にException in thread "main" [Error: unable to access property (null parent): hello]
.
インターネットには、さまざまな MVEL 言語の使用に関するトピックをカバーするチュートリアルがたくさんありますが、そのような埋め込みトピックの文書化は非常に不十分です。私が間違っていることを教えてください。
PS Javaからいくつかの機能を実行したくありません。MVEL で動的に定義する必要があります。
multimap - MVEL を使用してマルチマップに対してルールを評価する
MVEL を使用してマルチマップに対してルールを評価するにはどうすればよいのでしょうか。
すなわち:
foo
コンテキスト内の の可能な値[100, 200, 300]
。
どれが可能な値になるのかわからないので、それらをルールの一部として含めることはできません。
理想的には、次のようなことができるようになりたいです。
mvel - MVEL 用のカスタム Orb タグを作成する方法
MVEL 2.x を使用して電子メールの生成を行っていますが、カスタムの Orb タグを作成できるかどうか疑問に思っていました。stackoverflow と google で検索しましたが、何も見つかりませんでした。
java - MVELを使用する利点は何ですか?
私はjBPMエンジンを学んでいますが、プロセス設計でデフォルトでMVELダイアレクトを使用していることに気づきました。したがって、問題は、純粋なJavaの代わりにMVELを使用する利点は何ですか?Javaでプログラムを開始すると、より複雑なプロセスで問題が発生しますか?