我有一个运行Jaxb 2.1.12的应用程序。我正在运行JDK 1.5和OC4J 10.1.3.4.0。当我尝试使用我的应用程序使用Jaxb的部分时,我收到以下错误:
Unable to locate jaxb.properties for package
我把它缩小到了OC4J附带的xml.jar。它包含Jaxb 1.0类。我可以通过在orion-application.xml文件中添加以下内容来修复此错误:
<imported-shared-libraries>
<remove-inherited name="oracle.xml"/>
</imported-shared-libraries>
问题是我使用admin_client.jar实用程序将WAR文件部署到OC4J。我没有EAR来放入orion-application.xml文件,因此我决定尝试将orion-web.xml文件添加到WAR的WEB-INF目录并将search-local-classes-first属性设置为true :
<?xml version="1.0"?>
<orion-web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-web-10_0.xsd" deployment-version="10.1.3.4.0"
jsp-cache-directory="./persistence"
jsp-cache-tlds="standard"
simple-jsp-mapping="false"
temporary-directory="./temp"
schema-major-version="10" schema-minor-version="0" >
<web-app-class-loader search-local-classes-first="true" />
<web-app>
</web-app>
</orion-web-app>
这会导致应用程序根本不进行部署。我收到一条错误消息,指出无法解析Spring配置文件。我想首先使用search-local-classes。我该如何使用这个属性?还有一种方法可以使用WAR文件部署orion-application.xml文件吗?
09/11/16 13:26:01 WARNING: DeployerRunnable.run Unexpected exception parsing XML document from Servl
etContext resource [/WEB-INF/applicationContext-acegi-security.xml]; nested exception is java.lang.C
lassCastException: oracle.xml.jaxp.JXDocumentBuilderFactoryoracle.oc4j.admin.internal.DeployerExcept
ion: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/applicationCon
text-acegi-security.xml]; nested exception is java.lang.ClassCastException: oracle.xml.jaxp.JXDocume
ntBuilderFactory
at oracle.oc4j.admin.internal.DeployerBase.execute(DeployerBase.java:126)
at oracle.oc4j.admin.jmx.server.mbeans.deploy.OC4JDeployerRunnable.doRun(OC4JDeployerRunnabl
e.java:52)
at oracle.oc4j.admin.jmx.server.mbeans.deploy.DeployerRunnable.run(DeployerRunnable.java:81)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledE
xecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
注意:我没有在Java 1.6中遇到此错误,我相信这是因为1.6与Jaxb 2打包在一起。
答案 0 :(得分:1)
在“search-local-classes-first”的文档中,我看到以下行:
根据servlet规范,search-local-classes-first功能不能用于加载java。或javax。* packages中的类。*
因为JAXB2包含在JDK 1.6中并且现在位于javax.*
之下,所以appserver可能会忽略类/库,即使它存在于WEB-INF / lib目录中。尝试将JAXB jar放在$ JRE_HOME / lib目录中。如果它被拾取,那么您可以尝试修改appserver的启动脚本,以将JAXB jar包含在原始类路径中。
解决方案有点破解:)。这是一个链接,其中包含为Apache CXF执行相同操作的步骤。
答案 1 :(得分:1)
如果创建一个ear文件解决了这个问题,我建议你这样做。此外,当您部署war文件时,容器会为您创建一个耳朵。检查oc4j的安装目录的应用程序目录中的ear文件。