0

我在将简单的 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

再次感谢大家!

4

3 回答 3

2

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

于 2009-01-25T02:17:52.443 回答
1

我认为这是一个 CLASSPATH 问题。

我对 OC4J 不是很熟悉,但是您如何打包/部署您的 Web 应用程序?

您需要确保 CXF jar 在WEB-INF/lib您的 WAR 目录中吗?

更新:您的评论有点困惑 - 如果您的 spring 配置位于META-INF您的 EAR 目录中,那么这与您的 web 应用程序使用的类路径不同。所以,事实上,把 CXF 罐子塞进WEB-INF/lib去是行不通的。您要么需要将 JAR 粘贴在 EAR 的顶层,要么粘贴在 OC4J 的所有类加载器共享的某个库中。我建议研究 OC4J 的企业应用程序/网络应用程序类加载器层次结构文档,看看这是否可以提供更多建议?

于 2009-01-23T14:11:13.970 回答
1

看起来像 Spring 的配置问题:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]
Offending resource: ServletContext resource [/WEB-INF/beans.xml]

当应用程序启动时,您的 web.xml 中是否有任何内容可以读取?您是否在代码中的任何位置看到为该名称空间声明的 NamespaceHandler?

于 2009-01-23T15:00:53.980 回答