私は自分の問題を説明しようとします。次の構成:
- Servicemix には 2 つのバンドルがあります。1 つはモデル、もう 1 つはサービスです。モデル バンドルはモデル パッケージをエクスポートし、サービス バンドルはモデル バンドルからモデル パッケージをインポートします。
- サービス バンドルには、実行という 1 つのサービス メソッドを持つ Web サービス (CXF) があります。このメソッドは 2 つのパラメーターを使用します。1 つ目 (文字列) は JavaScript ファイルの名前で、2 つ目は引数のマップ (HashMap) です。このサービスは、javax.scipt.CompiledScript.eval(Bindings bindings) を使用して JavaScript スクリプトを実行します。アイデアは、スクリプト言語でビジネス ロジックを作成することです。
- JavaScript スクリプトは、次の方法で Java オブジェクトにアクセスできます。
a/ バインディング - 問題なし。bindings.put(name, object) を使用して追加したすべてのオブジェクトのインスタンスがスクリプトに表示されます
b/ importPackage(Packages.my.java.package.from.model.bundle) - 問題が発生しました: キーワード「new」を使用してモデル バンドルから javascript Java オブジェクトを作成しようとすると、次のエラーが発生します。
class com.google.code.scriptengines.js.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: ReferenceError: 「製品」が定義されていません。(#4) ファイルの [4] で
ここで、Product はモデル バンドルの Java クラスであり、4 行目で次のオブジェクトを作成しようとしています。
var product = new Product();
そして、非常に重要な情報だと思います。Servicemix 4.2.0 ではすべて問題ありませんでした。4.3.1 にアップグレードする必要がありますが、動作しません (両方とも Fusesource のバージョン)。
何か助けはありますか?
よろしく、ジャセク