Ich arbeite derzeit ein Projekt, das auf Frühling MVC basiert, es ist nur ein Standardprojekt mit Frühling MVC-Vorlage. so habe ich web.xml und Servlet-context.xml.
Ich arbeite an der Hinzufügung von Apache cxf-Webdiensten in dieses Projekt und stoße auf einige Probleme bei der gemeinsamen Nutzung von Diensten mit bestehenden Spring MVC.
Mein anfänglicher Ansatz war der Versuch, Webdienste zum Laufen zu bringen, also sieht meine web.xml wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets
and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml
/WEB-INF/spring/jaxwsServlet/jaxwsServlet-context.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Process web service requests -->
<servlet>
<servlet-name>jaxws</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jaxws</servlet-name>
<url-pattern>/industryAspectWS</url-pattern>
</servlet-mapping>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
und meine jaxwsServlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://jax-ws.dev.java.net/spring/core
classpath:spring-jax-ws-core.xsd
http://jax-ws.dev.java.net/spring/servlet
classpath:spring-jax-ws-servlet.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<wss:binding url="/industryAspectWS">
<wss:service>
<ws:service bean="#industryAspectWS"/>
</wss:service>
</wss:binding>
<!-- Web service methods -->
<bean id="industryAspectWS" class="com.example.ws.IndustryAspectWS"></bean>
<context:component-scan base-package="com.example" />
<beans:import resource="../HibernateTransaction.xml" />
<beans:import resource="../JaxbMarshaller.xml" />
</beans>
Ich habe die kontext:komponenten-scan beans:import Abschnitte aus servlet-context.xml
Diese Konfiguration funktioniert gut, da ich in der Lage war, den Server hochzufahren, Webdienste aufzurufen und auch auf Servlet und JSP zuzugreifen. Da ich jedoch die Datei hibernateTransaction.xml in beiden Kontext-xml-Dateien zitiert habe, stelle ich fest, dass es zwei Sitzungsfabriken gibt.
Ich möchte alle Dienste (z. B. Hibernate) zwischen Apache cxf und Spring MVC-Controllern teilen, also habe ich versucht, Einstellungen in Root-context.xml zu setzen, es hat nicht funktioniert. Ich habe auch versucht, dies online zu suchen, habe aber keine vollständigen Beispiele für gemeinsam genutzte Dienste gefunden. Ist es möglich, dass wir eine Einstellung setzen können, um Dienste zwischen den beiden zu teilen?
\=================================================
Ich hatte einige Einstellungen ausprobiert, nachdem ich dies gepostet hatte, und dachte mir, wenn ich die Zeilen von
<context:component-scan base-package="com.example" />
et
<tx:annotation-driven transaction-manager="txManagerExample" />
Sowohl in der servlet-context.xml als auch in der jaxwsServlet-context.xml wird es funktionieren. Alle anderen Einstellungen können in der gemeinsamen Root-context.xml bleiben.