1

我有一个包含大部分业务逻辑的 JAR 文件。我在 Spring MVC 中开发的 Web 应用程序使用该 JAR 文件。为了保护 JAR 文件,我使用了 JarCryp。JarCryp 已从 JAR 文件创建了一个 .sjar 文件。现在,为了从 Tomcat 加载 JAR 文件,我已经添加到 Tomcat 的 context.ie 中,将以下行添加到 context.xml

 <Loader className="ComponioSampleClassLoader" ></Loader>

ComponioSampleClassLoader类扩展org.apache.catalina.loader.WebappClassLoader

现在,当我启动tomcat时,出现以下错误

INFO: Deploying configuration descriptor host-manager.xml
Mar 1, 2013 11:50:41 PM org.apache.tomcat.util.digester.Digester endElement
SEVERE: End event threw exception

    java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:928)
        at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:193)
        at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
        at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1138)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
        at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:793)
        at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:732)
        at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1018)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.StandardContext.init(StandardContext.java:5700)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4448)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
        at org.apache.catalina.core.StandardService.start(StandardService.java:525)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
    Mar 1, 2013 11:50:41 PM org.apache.catalina.startup.ContextConfig processContextConfig
    SEVERE: Parse error in context.xml for /host-manager
    java.lang.IllegalArgumentException: argument type mismatch
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
        at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
        at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1141)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
        at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
        at org.apache.catalina.startup.ContextConfig.processContextConfig(ContextConfig.java:793)
        at org.apache.catalina.startup.ContextConfig.contextConfig(ContextConfig.java:732)
        at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1018)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.StandardContext.init(StandardContext.java:5700)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4448)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
        at org.apache.catalina.core.StandardService.start(StandardService.java:525)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
    Caused by: java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:928)
        at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:193)
        at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
        at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1138)
        ... 40 more

你能帮帮我吗?

4

1 回答 1

1

只是在同一个问题上挣扎了几个小时......

您需要从 WebappLoader (org.apache.catalina.loader.WebappLoader) 而不是 WebappClassLoader 扩展。

您会注意到两者的构造函数是相同的,因此在进行此更改时您的构造函数很可能不需要更改。

package tomcat7;

import org.apache.catalina.loader.WebappLoader;

public class Tomcat7CustomWebappLoader extends WebappLoader {

    public Tomcat7CustomWebappLoader() {
        super();
    }

    public Tomcat7CustomWebappLoader(ClassLoader parent) {
        super(parent);
    }
}

在查看与 Tomcat 一起打包的“VirtualWebappLoader”(org.apache.catalina.loader.VirtualWebappLoader)加载器实现时,WebappLoader 的扩展也很明显。

不幸的是,您没有使用特定用例的经验,但是 Loader 需要扩展 WebappLoader。

靠近页面底部的更高级的实现在这里

于 2013-03-20T02:53:13.127 回答