2

Tomcat 7.0.31 で動作する Eclipse Virgo (3.6.1) OSGi コンテナーを使用しています。Tomcatのドキュメントに従ってカスタム認証レルムを実装しようとしていClassNotFoundExceptionますが、サーバーを起動しようとするとエラーが発生します。

私のレルムの実装は非常に単純です。メソッドを拡張JDBCRealmしてオーバーライドするだけauthenticateです。ドキュメントに従って、このクラスを というタイトルの jar にコンパイルしcom.authentication.MyCustomRealm.jar、$SERVER_HOME/lib に配置しました。

tomcat-server.xml に追加した構成は次のとおりです。

<Realm className="com.authentication.MyCustomRealm"
  resourceName="Custom Realm"
  driverName="{jdbc.driverClassName}"
  dbConnectionName="{jdbc.username}"
  dbConnectionPassword="{jdbc.password}"
  dbConnectionURL="{jdbc.url}"
  userTable="USER_DATA"
  userNameCol="ID" />
</Realm>

部分的なスタック トレースを次に示します。

org.xml.sax.SAXParseException: Error at (103, 40) : com.authentication.MyCustomRealm
    at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2687)
    at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2719)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1279)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1303)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1556)
    at org.eclipse.gemini.web.tomcat.internal.OsgiAwareEmbeddedTomcat.configure(OsgiAwareEmbeddedTomcat.java:309)
    ... 42 common frames omitted com.authentication.MyCustomRealm 
    at org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:181)
    at org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:164)
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:144)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)

Caused by: java.lang.ClassNotFoundException: com.authentication.MyCustomRealm
    at org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.doLoadClass(ChainedClassLoader.java:181)
    at org.eclipse.gemini.web.tomcat.internal.loading.ChainedClassLoader.loadClass(ChainedClassLoader.java:164)
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:144)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)
    ... 55 common frames omitted

クラスを見つけるために、OSGi 構成で何か特別なことをする必要があるのではないかと疑っていますが、それが何であるかは正確にはわかりません。

4

1 に答える 1

0

スタック トレースから、org.eclipse.gemini.web.tomcatバンドルがカスタム レルムをロードしようとしていることがわかりました。org.eclipse.gemini.web.tomcat私の解決策は、ホストとして使用する新しいフラグメント バンドルを作成することでした。カスタム レルムをこのバンドルに配置したことで、この例外が解決されました。

于 2013-09-12T16:48:36.873 に答える