2014-10-12 119 views
0

我有一個HtmlUnit依賴關係的Spring MVC應用程序。我在@Component類中使用HtmlUnit實用程序。問題是,經過編譯(根源java.lang.NoClassDefFoundError:組織/阿帕奇/ HTTP/HttpEntity),在瀏覽器啓動(索引頁),我看到的頁面:Spring HtmlUnit依賴關係

> HTTP Status 500 - Servlet.init() for servlet mvc-dispatcher threw 
> exception 
type Exception report 
message Servlet.init() for servlet mvc-dispatcher threw exception 
description The server encountered an internal error that prevented it from fulfilling this request. 
exception javax.servlet.ServletException: Servlet.init() for servlet mvc-dispatcher threw exception 

root cause java.lang.NoClassDefFoundError: org/apache/http/HttpEntity 
root cause java.lang.ClassNotFoundException: org.apache.http.HttpEntity 


org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    java.lang.Class.getDeclaredConstructors0(Native Method) 
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2532) 
    java.lang.Class.getDeclaredConstructors(Class.java:1901) 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:230) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:976) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:949) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598) 
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661) 
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 
    javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 

全部依賴需要我已經使用maven包括在內,這是我的的pom.xml

<dependency> 
    <groupId>net.sourceforge.htmlunit</groupId> 
    <artifactId>htmlunit</artifactId> 
    <version>2.15</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-lang3</artifactId> 
    <version>3.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpmime</artifactId> 
    <version>4.3.5</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.3.5</version> 
</dependency> 

如果我從類中刪除@Component註解 - 應用程序不會失敗在啓動時,但實際控制人通話,它使用該類(使用HtmlUni t裏面) - 相同的錯誤。如果我從控制器中刪除使用HtmlUnit的類,一切都很好。 我也嘗試過自己添加庫,而不使用maven - 沒有幫助以太。 關於它的主要祕密是,我的類(使用HtmlUnit)完美地在平常的控制檯應用程序中工作。所以我嘗試了很多東西,我仍然沒有得到這個問題的原因是什麼,爲什麼它不適用於Spring?也許HtmlUnit僅適用於一個線程應用程序?但爲什麼有ClassNotFoundException?

回答

1

你是如何運行這個應用程序?你是否在tomcat服務器上將它作爲戰爭歸檔文件運行?如果是這樣,你的戰爭歸檔包括你在/ WEB-INF/lib文件夾中的htmlunit依賴關係嗎?運行應用程序的運行環境顯然沒有與控制檯應用程序相同的類路徑。

您的htmlunit依賴關係應該位於/ WEB-INF/lib下,或者位於服務器類路徑中(儘管不推薦使用後者)。