Java WebServices с Spring и OAS / OC4J - PullRequest
       16

Java WebServices с Spring и OAS / OC4J

0 голосов
/ 23 января 2009

У меня проблемы с развертыванием простого приложения WebServices (например, "Hello World" simple) на 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 не знает, какие банки он хочет видеть, где (как я знаю, может быть Tomcat). В моей папке WEB-INF / lib находятся jar CXF, jar Spring (bean, context, core и web), xml-resolver-1.2.jar и XmlSchema-1.4.2.jar. Если мне нужно будет перечислить все в папке WEB-INF / lib, я буду. Но опять же, программа работает в Jetty.

Другое правка: Исходя из того, что я читаю здесь , это похоже на проблему между Spring и CXF jar - в JX CAR есть класс NamespaceHandler ( в org.apache.cxf.frontend.spring, если быть точным), но, похоже, существует проблема конфигурации, не позволяющая Spring увидеть его.

Последнее редактирование: Спасибо всем за помощь. Я никогда не заканчивал тем, что заставлял CXF работать в OC4J, потому что мой клиент находится на версии 10.1.3.3.0. Он не совместим с J2EE 5, и я уверен, что они не собираются распаковывать свой oc4j.jar, чтобы изменить boot.xml. Но без документа, на который указал мне Даниил, я бы никогда этого не узнал.

Итак, я переключился на версию 1.2.6 XFire и после нескольких сбоев запустил свое тестовое приложение. По ходу дела я узнал кое-что интересное об OC4J:

  • При развертывании в Enterprise Manager не забудьте сначала загрузить локальный путь к классам.
  • OC4J использует нестандартные файлы XML, поэтому убедитесь, что ваше приложение не использует какие-либо из собственных файлов XML OC4J (в разделе «Параметры развертывания» снимите флажки со всех выбранных в данный момент импортов - таким образом, вы можете убедиться, что приложение использует только файлы, которые вы предоставляете в WEB-INF / lib)
  • Если можете, используйте другой сервер приложений. : P

Еще раз всем спасибо!

Ответы [ 3 ]

2 голосов
/ 25 января 2009

Ненавижу спрашивать об очевидном, но вы рассматривали все вещи для совместной настройки OS4J и CXF с веб-сайта CXF? http://cwiki.apache.org/CXF20DOC/appserverguide.html#AppServerGuide-OC4J

1 голос
/ 23 января 2009

Похоже, проблема конфигурации с 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, объявленное для этого пространства имен где-нибудь в вашем коде?

1 голос
/ 23 января 2009

Я бы подумал, что это проблема CLASSPATH.

Я не очень знаком с OC4J, но как вы упаковываете / развертываете свое веб-приложение?

Вам необходимо убедиться, что файл CXF находится в каталоге WEB-INF/lib вашей WAR?

Обновление: вас немного смущают ваши комментарии - если ваша весенняя конфигурация находится в каталоге META-INF вашего EAR, то это не тот же путь к классам, который используется вашим веб-приложением. Так что, на самом деле, вставка баночки CXF в WEB-INF/lib не сработает. Вам нужно будет либо вставить JAR в верхний уровень вашего EAR, либо в какую-нибудь библиотеку, разделяемую всеми загрузчиками классов OC4J. Я предлагаю изучить документацию OC4J по иерархии загрузчиков классов корпоративных приложений / веб-приложений, чтобы узнать, может ли это дать дополнительные рекомендации?

...