2013-03-02 33 views
1

我有一個包含大部分業務邏輯的JAR文件。我的Web應用程序,在Spring MVC中開發,使用該JAR文件。爲了保護JAR文件,我使用了JarCryp。 JarCryp從JAR文件創建了一個.sjar文件。現在,加載從Tomcat JAR文件,我已經交鋒到Tomcat context.ieAdded以下行的context.xml將ClassLoader添加到Tomcat

<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 

你能幫我嗎?

回答

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); 
    } 
} 

從WebappLoader擴展在看「VirtualWebappLoader」(org.apache.catalina.loader.VirtualWebappLoader)裝載機Tomcat的包裝實現時也很明顯。

不幸的是,您的具體使用案例沒有經驗,但Loader需要擴展WebappLoader。

附近here

+0

感謝您的回覆,即使是在你提到的鏈接,接受的答案是擴大WebappClassLoader頁面底部的更高級的實現。它解決了你的問題嗎?我現在就試試看,並找回結果。 – Saurabh 2013-03-20 05:45:14

+0

好的,那個鏈接似乎是錯誤的 - 除非這是Tomcat6中的命名約定。在Tomcat7中,我需要爲我的Loader實現擴展WebappLoader。在WebappLoader中有一個引用WebappClassLoader的字段(爲了您的實現,您可能還需要子類化 - 不確定) – 2013-03-20 12:12:55

+0

只需拿起其他有用的東西即可。您可以在標記中指定Loader和Classloader子類。對於Classloader子類,您需要在您的問題中使用「loaderClass」屬性NOT「className」(後者用於Loader子類)。搜索文檔中的屬性名稱[here](http://tomcat.apache.org/tomcat-7.0-doc/config/loader.html) – 2013-03-20 12:26:07