私は単純なブール式を評価する必要のあるカスタムロジックを持っています。私のIDEではうまく動作するいくつかの単体テストがありますが、CQ 5.6.1インスタンスで使用しようとすると、ScriptEngineManager
はJavaScriptエンジンを見つけることができません。これは、どの環境でも標準的なJavaインストールの一部でなければなりません。私は通常助け以下持ってポンポンでCQ 5.6でRhino(またはJavaScriptエンジン)を有効にする方法は?
ScriptEngineManager sef = new ScriptEngineManager();
ScriptEngine se = sef.getEngineByName("JavaScript");
:
<Import-Package>*;resolution:=optional</Import-Package>
あなたはsling.properties
でbootdelegationに入れていないとき、通常、いくつかのシステムライブラリは、OSGiの中で公開されていないが、しかし、これはどちらも機能しませんでした:
org.osgi.framework.bootdelegation=org.w3c.*,com.sun.script.*,com.yourkit.*, ${org.apache.sling.launcher.bootdelegation}
他に何を試すことができますか?
編集: また、私のクリスチャンへのコメントについては、答えを参照してください。私は、OSGiでサービスが存在すべきであることが判明: http://svn.apache.org/repos/asf/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
しかし、私は次のコードでそれを参照しようとすると、私のサーブレットは、もはや有効ではありません。
@Reference
private transient ScriptEngineFactory sef = null;
だから、それを思わ何らかの理由で工場に注入できません。このインターフェイスを実装するサービスが複数ある可能性があることがわかりました。
EDIT2:私のサーブレットは、それが満たされていると言われます。これにより
@Reference(target = "(component.name=org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory)")
private transient ScriptEngineFactory sef = null;
:私は今でも直接Rhinoの工場を参照しようとしました
["Satisfied","Service Name: javax.script.ScriptEngineFactory","Target Filter: (component.name=org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory)","Multiple: single","Optional: mandatory","Policy: static","Bound Service ID 2004 (org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory)"]
しかし、私は私のサーブレットにアクセスする場合トリガされず、SlingDefaultServletが引き継ぎます。上記の@Reference
がなければ、アクセス可能ですので、何かをしなければなりません。
ありがとう、私は、org.apache.sling.scripting.javascriptがこの場合に利用できるはずだが、まだ成功していないことを知ったが、感謝した。私はこの依存関係を明示的にpom.xmlに追加しました – Thomas
ブログの項目で提供されたクラスで試してみましたが、今はfindFactoryCandidatesのBundleContextを知らないと不平を言っています: org.apache.sling.engine.impl.SlingRequestProcessorImplサービス:Uncaught Throwable java.lang.NoClassDefFoundError:org/osgi/framework/BundleContext – Thomas