2010-02-21 100 views
2

我有一個非常惱人的問題。Glassfish戰爭部署Jar未加載

所以我想在我的Java Web應用程序(.war文件)中包含2個jar文件 - 要在glassfish 2.1版上加載。

的文件有:

axis2-adb-1.4.1.jarwstx-asl-3.2.4.jar

在我的控制檯應用程序中,我只是將這些添加到我的類路徑中,並且它們運行良好。然而,當我部署這GlassFish的(罐被放置在WEB-INF/lib/)我得到這樣的:

java.lang.reflect.InvocationTargetException

org.apache.axis2.AxisFault: org.apache.axis2 .databinding.ADBException: 不能調用在擴展映射類

我注意到,在我的控制檯應用程序,當我從我的類路徑中刪除wstx-asl-3.2.4.jar,我會得到這個確切的getTypeObject 方法同樣的錯誤。所以我的感覺是,這個罐子沒有加載一些方法。

然後,我繼續將罐子重新包裝在一起。我做了這個big axis2 + wstx.jar並將其加載到我的glassfish項目中。同樣的錯誤...它肯定是加載,因爲沒有axis2 jar它會拋出一個axis2類不def異常的方式提前。

所以我的理論是,玻璃魚正在加載罐子懶洋洋地,因爲無論axis2 jar還是我的主程序都不需要這個wstx jar,它沒有正確加載。但我可能完全錯誤。

我真的很希望有人能幫我解決這個問題。

回答

4

從GF v2 b49開始,Woodstox作爲Glassfish的一部分與sjsxp一起被集成,它仍然是默認的解析器。爲了使Woodstox設置在服務器端下面的系統屬性:

-Djavax.xml.stream.XMLEventFactory=com.ctc.wstx.stax.WstxEventFactory 
-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory 
-Djavax.xml.stream.XMLOutputFactory=com.ctc.wstx.stax.WstxOutputFactory 

的更多細節Woodstox in Glassfish v2

如果使用集成Woodstox不符合你的要求,那麼也許嘗試通過在class-loader元素設置delegate="false"設置以激活sun-web.xml文件中的「類加載委託功能」。類似的東西:

<sun-web-app> 
    <class-loader delegate="false"/> 
</sun-web-app> 
+0

聖潔的廢話這個作品。你太棒了。我會更多地考慮設置這些系統屬性:) – Andy 2010-02-24 00:47:12

0

我覺得在兩個罐子裏都有相同的類。不知何故,沒有getTypeObject方法的類首先被加載。如果有機會改變classpath中加載的jar的順序,它會有所幫助。