0

私は自分の問題を説明しようとします。次の構成:

  1. Servicemix には 2 つのバンドルがあります。1 つはモデル、もう 1 つはサービスです。モデル バンドルはモデル パッケージをエクスポートし、サービス バンドルはモデル バンドルからモデル パッケージをインポートします。
  2. サービス バンドルには、実行という 1 つのサービス メソッドを持つ Web サービス (CXF) があります。このメソッドは 2 つのパラメーターを使用します。1 つ目 (文字列) は JavaScript ファイルの名前で、2 つ目は引数のマップ (HashMap) です。このサービスは、javax.scipt.CompiledScript.eval(Bindings bindings) を使用して JavaScript スクリプトを実行します。アイデアは、スクリプト言語でビジネス ロジックを作成することです。
  3. 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 のバージョン)。

何か助けはありますか?

よろしく、ジャセク

4

1 に答える 1

0

スクリプト エンジン バンドルには、製品パッケージに対するパッケージの可視性がないようです。

スクリプト エンジンを使用して、バンドルで動的インポートを有効にしてみてください。

list | grep -i javascript

次に、エンジンを含むバンドルのバンドル ID を見つけます。たとえば、

そして、使用します

dev:dynamic-import  ID of that bundle

変更が反映されない場合は、ESB の再起動が必要になる場合があります。

于 2013-05-12T07:11:34.843 に答える