У меня проблемы с развертыванием простого приложения 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
Еще раз всем спасибо!