我在将简单的WebServices应用程序(例如“ Hello World”简单程序)部署到OC4J时遇到问题。相同的代码在Jetty下可以正常工作,但是在OC4J中会中断,我想知道是否还有其他人遇到过相同的问题。我正在使用企业管理器来部署应用程序,但是部署失败并显示以下消息:

    [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]


查看bean.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中运行。

另一编辑:根据我在读的here内容,这似乎是Spring和CXF jar之间的问题-CXF jar中有一个NamespaceHandler类(确切地说,在org.apache.cxf.frontend.spring中),但似乎是一个配置问题,导致Spring无法看到它。

最后编辑:谢谢大家的帮助。我从未最终使CXF在OC4J中工作,因为我的客户端版本为10.1.3.3.0。它不符合J2EE 5,而且我很确定他们不会为了解压缩boot.xml而解压缩oc4j.jar。但是,如果没有Daniel所指的文件,我将一无所知。

因此,我切换到XFire版本1.2.6,并在几次打h之后使我的测试应用程序正常工作。一路上,我学到了一些有关OC4J的有趣知识:


在企业管理器中进行部署时,请确保选择首先加载本地类路径。
OC4J使用非标准XML文件,因此请确保您的应用程序未使用OC4J的任何本机XML文件(在“部署设置”中,取消选中所有当前选择的导入-这样,您可以确保该应用程序仅使用您要使用的文件在WEB-INF / lib中提供)
如果可以,请使用其他应用程序服务器。 :P


再次谢谢大家!

最佳答案

我不想问明显的问题,但是您是否从CXF网站上一起查看了用于配置OS4J和CXF的所有内容?
http://cwiki.apache.org/CXF20DOC/appserverguide.html#AppServerGuide-OC4J

10-06 09:47