2013-04-16 78 views
1

當我在karaf/servicemix中部署一個簡單的.war文件時,出現以下錯誤。請讓我知道如果我錯過了什麼。karaf中的servlets/servicemix

錯誤:

的Manifest.MF:

java.lang.ClassNotFoundException: app.web.servlet.ConnectServlet not found by JDBCWebDemo [207] 
    at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)[org.apache.felix.framework-3.0.9.jar:] 
    at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)[org.apache.felix.framework-3.0.9.jar:] 
    at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)[org.apache.felix.framework-3.0.9.jar:] 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_26] 
    at org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:645)[org.apache.felix.framework-3.0.9.jar:] 
    at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1619)[org.apache.felix.framework-3.0.9.jar:] 
    at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:900)[org.apache.felix.framework-3.0.9.jar:] 
    at org.ops4j.pax.swissbox.core.BundleClassLoader.findClass(BundleClassLoader.java:176)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7] 
    at org.ops4j.pax.swissbox.core.BundleClassLoader.loadClass(BundleClassLoader.java:194)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7] 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_26] 
    at org.ops4j.pax.web.extender.war.internal.RegisterWebAppVisitorHS.newInstance(RegisterWebAppVisitorHS.java:221)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7] 

的代碼如下

Manifest-Version: 2 
Bundle-SymbolicName: JDBCWebDemo 
Bundle-Version: 2.3 
Bundle-ClassPath: WEB-INF/classes 
Import-Package: javax.servlet,javax.servlet.http 

的web.xml:

<web-app ...> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <description></description> 
    <display-name>ConnectServlet</display-name> 
    <servlet-name>ConnectServlet</servlet-name> 
    <servlet-class>app.web.servlet.ConnectServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>ConnectServlet</servlet-name> 
    <url-pattern>/ConnectServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

回答

1

你的OSGi包最有可能需要導出包GE具有servlet代碼,例如,在MANIFEST.MF文件,你需要有

Export-Package: app.web.servlet 
+1

真棒。但是,根據OSGi Export-Package的定義,「Bundles可能會從JAR中導出零個或多個軟件包,以供其他軟件包使用。」我沒有在戰爭之外使用過servlet,爲什麼它仍然需要這個參數?爲什麼我只需要導出servlet,還有其他類沒有在MANIFEST中定義就可以正常工作.MF – raka

+1

因爲karaf實際上是用''中指定的類名進行操作的。它試圖加載該類。對於Karaf能夠在您的包中找到該課程,您需要將其導出。 –

0

如果它不是你的戰爭中,你需要輸入正確的軟件包。

Import-Package: app.web.servlet 

,或者如果它裏面lib文件夾中的庫之一,你需要確保所有的瓶子都包含在類路徑:

Bundle-ClassPath: WEB-INF/classes, WEB-INF/lib/jar1.jar, ....