Hallo Zusammen,
ich habe einen Webservice der unter Apache Axis2 1.4 + Apache Tomcat 6.0.24 + jdk1.6.30 problemlos läuft. Aus diversen Gründen muss dieser auf Axis2 1.6 umgestellt werden. Innerhalb eines Services wird Spring 3.0.3 für Dependency Injection verwendet.
Seitdem ich auf Axis 1.6 umgestellt habe, erhalte ich beim Deployen des Services folgende Exception:
axis2-spring-1.6.1.jar und die entsprechenden spring-jars liegen ausschließlich in dem lib-Verzeichnis des Webservices (axis2/WEB-INF/serviceXYZ/lib) und nicht in axis2/WEB-INF/lib. Ein Blick auf meine services.xml:
LifeCycle für die Spring-Initialisierung:
in der applicationContext.xml ist ebenfalls folgender Eintrag vorhanden:
Wie gesagt, unter Axis2 1.4 lief die aufgeführte Konfiguration. Unter Axis2 1.6 nicht mehr. Gibt es Veränderungen bezüglich der Spring Integration? Auf der Axis2 Homepage kann ich keine entsprechenden Informationen finden.
Mir scheint als liegt hier ein ClassLoader Problem vor:
(1) Besteht eine Internetverbindung, kommt die aufgeführte Exception nicht, da das Schema direkt über die URL aufgelöst wird. Eine Internetverbindung liegt jedoch nicht vor im Betrieb!
(2) Wenn ich die axis2-spring-1.6.1.jar und die entsprechenden spring-jars direkt unter /WEB-INF/lib kopiere, startet Tomcat erfolgreich. Die entsprechnenden XSDs können in den spring-jars vom axis classloader gefunden werden.
Ein "EnableChildFirstClassLoading" in der axis2.xml auf true gesetzt bleibt auch ohne Erfolg. Hat jemand eine Idee? Da für jedes Archiv ein eigener Klassenlader erstellt wird, sollte er doch sämtliche spring-jars in dem Archiv finden, oder nicht?!?
Ich bin für jeden Tipp dankbar.
Viele Grüße
Biski
ich habe einen Webservice der unter Apache Axis2 1.4 + Apache Tomcat 6.0.24 + jdk1.6.30 problemlos läuft. Aus diversen Gründen muss dieser auf Axis2 1.6 umgestellt werden. Innerhalb eines Services wird Spring 3.0.3 für Dependency Injection verwendet.
Seitdem ich auf Axis 1.6 umgestellt habe, erhalte ich beim Deployen des Services folgende Exception:
Code:
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans-2.0.xsd', because 1) could not find t
he document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
....
axis2-spring-1.6.1.jar und die entsprechenden spring-jars liegen ausschließlich in dem lib-Verzeichnis des Webservices (axis2/WEB-INF/serviceXYZ/lib) und nicht in axis2/WEB-INF/lib. Ein Blick auf meine services.xml:
Code:
...
<service name="CheckService" class="com.sbw.LifeCycle">
<description>
CheckService
</description>
<!-- operations -->
<operation name="check">
<messageReceiver class="com.sbw.InOutReceiver"/>
</operation>
<parameter name="ServiceTCCL">composite</parameter>
<parameter name="InflowSecurity">
<action>
<items>UsernameToken</items
<passwordCallbackClass>com.sbw.Pwd</passwordCallbackClass>
</action>
</parameter>
</service>
</serviceGroup>
LifeCycle für die Spring-Initialisierung:
Java:
package com.sbw;
import org.apache.axis2.engine.ServiceLifeCycle;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.AxisService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class LifeCycle implements ServiceLifeCycle {
public void startUp(ConfigurationContext ignore, AxisService service) {
try {
System.out.println("Starting spring init");
ClassLoader classLoader = service.getClassLoader();
ClassPathXmlApplicationContext appCtx = new
ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();
System.out.println("spring loaded");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void shutDown(ConfigurationContext ctxIgnore, AxisService ignore) {
}
}
in der applicationContext.xml ist ebenfalls folgender Eintrag vorhanden:
Code:
<!-- Configure spring to give a hook to axis2 without a ServletContext -->
<bean id="applicationContext"
class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
Wie gesagt, unter Axis2 1.4 lief die aufgeführte Konfiguration. Unter Axis2 1.6 nicht mehr. Gibt es Veränderungen bezüglich der Spring Integration? Auf der Axis2 Homepage kann ich keine entsprechenden Informationen finden.
Mir scheint als liegt hier ein ClassLoader Problem vor:
(1) Besteht eine Internetverbindung, kommt die aufgeführte Exception nicht, da das Schema direkt über die URL aufgelöst wird. Eine Internetverbindung liegt jedoch nicht vor im Betrieb!
(2) Wenn ich die axis2-spring-1.6.1.jar und die entsprechenden spring-jars direkt unter /WEB-INF/lib kopiere, startet Tomcat erfolgreich. Die entsprechnenden XSDs können in den spring-jars vom axis classloader gefunden werden.
Ein "EnableChildFirstClassLoading" in der axis2.xml auf true gesetzt bleibt auch ohne Erfolg. Hat jemand eine Idee? Da für jedes Archiv ein eigener Klassenlader erstellt wird, sollte er doch sämtliche spring-jars in dem Archiv finden, oder nicht?!?
Ich bin für jeden Tipp dankbar.
Viele Grüße
Biski