簡體   English   中英

自定義Tomcat領域:ClassNotFoundException

[英]Custom Tomcat Realm : ClassNotFoundException

我正在使用在Tomcat 7.0.31上運行的Eclipse Virgo(3.6.1)OSGi容器。 我正在嘗試根據Tomcat文檔實現自定義身份驗證領域,但是在嘗試啟動服務器時遇到了ClassNotFoundException

我的領域實現非常簡單; 它只是擴展了JDBCRealm並覆蓋了authenticate方法。 根據文檔,我將該類編譯到一個名為com.authentication.MyCustomRealm.jar的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配置進行某些特殊處理才能找到該類,但是我不確定到底是什么。

從堆棧跟蹤中,我發現org.eclipse.gemini.web.tomcat捆綁包正在嘗試加載我的自定義領域。 我的解決方案是創建一個使用org.eclipse.gemini.web.tomcat作為主機的新片段捆綁包。 我將我的自定義領域放在該捆綁包中,此捆綁包解決了此異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM