我有一个使用JAXB 2的网络应用程序。当部署在Oracle 10g Application Server上时,一旦我尝试编组XML文件,就会出错。事实证明,Oracle在一个名为“xml.jar”的jar中包含了JAXB 1。
我如何强制我的webapp使用我在WEB-INF/lib
中部署的jaxb jar版本,而不是Oracle强制进入类路径的版本,理想情况是通过配置而不是在我的代码中乱用类加载器?
答案 0 :(得分:2)
我假设你使用的是前BEA Weblogic Server?
您可以将weblogic.xml文件添加到WEB-INF中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
(在回复评论时,我还没有足够的声誉: - ))
确实,DLL地狱因为它是“全有或全无”。似乎有另一种更有条件的方式,here。我自己没试过那个......
答案 1 :(得分:1)
如果您仍在使用Oracle的OC4J,那么请将他们的orion-application.xml包含在您的EAR的META-INF中。它应该看起来像......
<?xml version="1.0" encoding="UTF-8"?>
<orion-application>
<imported-shared-libraries>
<remove-inherited name="skip.this.package"/>
</imported-shared-libraries>
</orion-application>
...包含您要跳过的包裹。
答案 2 :(得分:0)
使用与Oracle实例不同的JVM,并确保它们的库不在您的类路径中。