Pax Web OSGiコンテナに組み込まれているJetty 8にカスタムエラーハンドラを登録しようとしています。Pax Web内のJettyエラーハンドラの登録エラー
<Call name="addBean">
<Arg>
<New class="my.custom.handler">
<Set name="server"><Ref id="Server"/></Set>
</New>
</Arg>
</Call>
しかし、この構成の後に桟橋が起動しないと、私は、ログファイルからの根本的な原因の次のエラーメッセージが表示されます:私は、jetty.xmlファイルに次の、基本的なXML設定を追加
Caused by: java.lang.NoSuchMethodException: class my.error.handler.MyErrorHandler.setServer(class org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.set(XmlConfiguration.java:592)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:396)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.newObj(XmlConfiguration.java:827)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.itemValue(XmlConfiguration.java:1141)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.value(XmlConfiguration.java:1044)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.call(XmlConfiguration.java:735)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:400)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:334)[70:org.eclipse.jetty.aggregate.jetty-all-server:8.1.19.v20160209]
at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:281)
... 16 more
PaxはJettyServerWrapperでJetty's Serverクラスをラップしているようですが、xml設定からのReflectionを使用して設定することはできません。 org.eclipse.jetty.xml.XmlConfigurationの内部クラスJettyXmlConfigurationから
:私は桟橋のソースコードに掘る場合、私は、XMLから、反射構成に関連するこのコードを発見
private void set(Object obj, XmlParser.Node node) throws Exception
{
...
// Try for trivial match
try
{
Method set = oClass.getMethod(name,vClass);
set.invoke(obj,arg);
return;
}
...
}
それから明らかですXmlConfigurationのsetメソッドは、特定の型のメソッドを取得しようとしますが、親クラスは探しません。これは、PaxでラップされたServerインスタンスをカスタムエラーハンドラで設定できない理由です。
したがって、xmlを使用してJettyを設定することはできなくなります。何か解決策はありますか?あなたは桟橋を設定する方法の説明がマニュアルに記載されています見つけることができます
コンテキストハンドラサーブレットをエラー処理にどのように使用できますか?また、参照したドキュメントでは、バンドルフラグメントで外部のjetty.xmlファイルを使用する方法について説明します。しかし、私はXML構成が使用されている限り私が言及したエラーに遭遇するでしょう。 – oak
@oak、ドキュメントをご覧ください。しかし、外部ファイルを使用することは可能です:http://ops4j.github.io/pax/web/SNAPSHOT/User-Guide.html#using-external-jetty-xml -ファイル –