我有一个使用JAXB 2的 Web 应用程序。在Oracle 10g 应用服务器上部署时,我一尝试编组 XML 文件就会出错。事实证明,Oracle 将JAXB 1包含在一个偷偷改名为“xml.jar”的 jar 中。
如何强制我的 webapp 使用我部署的 jaxb jar 的版本,WEB-INF/lib
而不是 Oracle 强制进入类路径的版本,最好是通过配置而不是在我的代码中弄乱类加载器?
我假设您使用以前的 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。虽然我自己没有试过那个...
如果您仍在使用 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>
...您要跳过的包裹。
使用与您的 Oracle 实例不同的 JVM,并确保它们的库不在您的类路径中。