4de64380b95c839493eee283c62aacd1e5ffd7cf
[SpringWebServicesForFun/.git] /
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
4     xmlns:context="http://www.springframework.org/schema/context"
5     xmlns:sws="http://www.springframework.org/schema/web-services"
6     xmlns:oxm="http://www.springframework.org/schema/oxm" 
7     xmlns:aop="http://www.springframework.org/schema/aop"
8     xmlns:util="http://www.springframework.org/schema/util"
9
10     xsi:schemaLocation="http://www.springframework.org/schema/beans 
11         http://www.springframework.org/schema/beans/spring-beans.xsd
12         http://www.springframework.org/schema/context 
13         http://www.springframework.org/schema/context/spring-context.xsd
14         http://www.springframework.org/schema/web-services 
15         http://www.springframework.org/schema/web-services/web-services.xsd
16         http://www.springframework.org/schema/oxm 
17         http://www.springframework.org/schema/oxm/spring-oxm.xsd
18         http://www.springframework.org/schema/util
19         http://www.springframework.org/schema/util/spring-util.xsd">
20
21     <!-- 
22         This file is an example about how someone should write code in order to send and
23         receive data from the Web Services.
24     -->
25    
26     <!-- Searches for beans in packages (instead of XML configuration we can use in this way annotations like @Service, @Component, etc, etc)  --> 
27     <context:component-scan base-package="de.spring.webservices"/>
28
29     <!--
30         Three ways of using a marshallers/unmarshallers.
31         
32         1. No declarar nada en el XML y dejar que Spring lo haga internamente todo por nosotros.
33         Esto equivale a esta configuracion en XML
34         
35         <oxm:jaxb2-marshaller id="marshaller" context-path="de.spring.webservices"/>
36         El context-path Spring supongo que lo rellena automáticamente en base al component-scan declarado arriba.
37         
38         2. Especificando el context-path para ser escaneado por Spring usando anotaciones. Esto
39         se hace de este modo:
40         
41         <oxm:jaxb2-marshaller id="marshaller" context-path="de.spring.webservices.auto"/>
42         Esto es lo mismo que haría Spring si no declaramos nada en el XML pero así tenemos opción de
43         de especificar un context-path en concreto.
44         
45         3. Especificando la implementación concreta del marshaller.
46         Con esta opción además puedo usar packagesToScan, contest-path si no recuerdo mal tenía problemas
47         cuando había dos ObjectFactory con el mismo package. Uno está en globalxsds y otro en este proyecto.
48         De todos modos, probablemente habría que usar un package distinto para lo que hay
49         en globalxsds (quizás incluso basado en el namespace del xsd) y así podría evitar esta configuración. 
50      -->
51         <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
52         <property name="packagesToScan" value="de.spring.webservices.auto"/>
53         </bean>
54      
55    
56     <!-- Required in order to use SOAP 1.2
57          id="messageFactory" is not a random choice, if you use another name it will not work
58          (Spring will end up loading SOAP 1.1)
59     -->
60     <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
61         <property name="soapVersion">
62             <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12" />
63         </property>
64     </bean> 
65     
66
67     <!-- 
68         ¿Este validador funciona teniendo inheritance en el xsd? (inheritances es una cosa especial 
69         del JAXB2 que estoy usando para generar las clases desde el xsd)
70         Parece que el unmarshal (que supongo que se hace con el JAXB2 que está en el classpath
71         debido al tipo de Endpoint que estoy usando, que por cierto no sé cual JAXB2 está cogiendo realmente) 
72         funciona, así que supongo el validador tambien :/
73         Lo que realmente tampoco sé es si hay alguna relación entre los validadores y JAXB2 :/
74     -->
75     <bean id="payloadValidatingInterceptor" 
76         class="org.springframework.ws.client.support.interceptor.PayloadValidatingInterceptor">
77         <property name="schemas">
78             <list>
79                 <value>classpath:schemas/examples.xsd</value>
80                 <value>classpath:schemas/parent.xsd</value>
81             </list>
82         </property>
83         <property name="validateRequest" value="true"/>
84         <property name="validateResponse" value="true"/>
85     </bean>
86     
87
88     <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
89         <constructor-arg ref="messageFactory"/>
90         <property name="marshaller" ref="marshaller" />
91         <property name="unmarshaller" ref="marshaller" />
92
93         <!-- For local deployments change to http://localhost:8080/web-services-spring-jaxb2-server/spring-ws/example/example.wsdl -->
94         <property name="defaultUri" value="http://gumartinm.name/spring-ws/example/example.wsdl"/>
95
96         <property name="interceptors">
97             <list>
98                 <ref bean="payloadValidatingInterceptor" />
99             </list>
100         </property>
101     </bean>
102     
103     <!--
104     Using @Service and @Autowired
105     We could use just XML configuration, or XML confirguration and @Autowired or as I am doing now @Service and @Autowired.
106     <bean id="exampleClientService" class="de.spring.webservices.client.ExampleClientService">
107         
108         @Autowired works even using XML configuration as long as you use context:component-scan
109         <property name="webServiceTemplate" ref="webServiceTemplate"/>
110     </bean>
111     -->
112     
113 </beans>