我在将简单的 WebServices 应用程序(如“Hello World”简单)部署到 OC4J 时遇到问题。相同的代码在 Jetty 下运行良好,但在 OC4J 中中断,我想知道是否有其他人遇到过同样的问题。我正在使用 Enterprise Manager 部署应用程序,但部署失败并显示以下消息:
[Jan 23, 2009 8:46:20 AM] Binding TestWs web-module for application TestWs to site default-web-site under context root /TestWs
[Jan 23, 2009 8:46:22 AM] Operation failed with error: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]
Offending resource: ServletContext resource [/WEB-INF/beans.xml]
查看 beans.xml,有问题的代码似乎是 XML 命名空间声明:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint
id="helloService"
implementor="com.test.endpoint.HelloImpl"
address="/HelloWorld" />
</beans>
堆栈跟踪并不是非常有启发性:
09/01/23 08:57:28 oracle.oc4j.admin.internal.DeployerException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]
Offending resource: ServletContext resource [/WEB-INF/beans.xml]
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
09/01/23 08:57:28 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
09/01/23 08:57:28 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:261)
09/01/23 08:57:28 at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1120)
...
有没有其他人遇到过类似的问题?如果是这样,修复它的最佳方法是什么?我的 XML 技能中等,而且我完全是 WebServices 的菜鸟。但这可能是一个 OC4J 问题。
在此先感谢您的帮助!
编辑:据我所知,这不是类路径问题,除非 OC4J 对它想在哪里看到的 jar 感到奇怪(我知道 Tomcat 可以)。我的 WEB-INF/lib 文件夹包含 CXF jar、Spring jar(bean、上下文、核心和 Web)、xml-resolver-1.2.jar 和 XmlSchema-1.4.2.jar。如果我需要列出 WEB-INF/lib 文件夹中的所有内容,我会的。但同样,该程序在 Jetty 中运行。
另一个编辑:根据我在这里阅读的内容,这似乎是 Spring 和 CXF jar 之间的问题——CXF jar 中有一个 NamespaceHandler 类(org.apache.cxf.frontend.spring
准确地说),但似乎有一个配置问题阻止看到它就春天。
最后编辑:谢谢大家的帮助。我最终没有让 CXF 在 OC4J 中工作,因为我的客户端使用的是 10.1.3.3.0 版本。它不符合 J2EE 5,而且我很确定他们不会为了更改 boot.xml 而解压他们的 oc4j.jar。但如果没有丹尼尔给我指的文件,我永远不会知道这一点。
所以我切换到 XFire 版本 1.2.6,并在一些小问题后让我的测试应用程序正常工作。一路走来,我学到了一些关于 OC4J 的有趣的东西:
- 在 Enterprise Manager 中部署时,请确保您选择首先加载本地类路径。
- OC4J 使用非标准 XML 文件,因此请确保您的应用程序没有使用任何 OC4J 的原生 XML 文件(在部署设置中,取消选中所有当前选择的导入 - 这样,您可以确保应用程序仅使用您的文件在 WEB-INF/lib 中提供)
- 如果可以,请使用另一个应用服务器。:P
再次感谢大家!