Last modified by Administrateur local on 2022/08/05 12:01

Show last authors
1 La configuration des services web REST est assurée par défaut par le fichier //WEB-INF/beans.xml//.
2 Ce fichier de configuration //Spring// déclare des éléments **<bean>** paramétrables à l'aide de sous-éléments **<property>**.
3 La totalité ou une partie des valeurs des propriétés peuvent être regroupées dans un fichier afin d'être externalisées via une ressource JNDI.
4
5 Exemple de fichier //beans.xml// avec des propriétés dont les valeurs sont externalisées via une ressource JNDI nommée "java:comp/env/url/jettisonConf"
6 Pour externaliser une valeur, il faut affecter à l'attribut **value** la valeur : **"${identifiant}"**
7
8
9 {{code language="none"}}
10 <?xml version="1.0" encoding="UTF-8"?>
11 <beans xmlns="http://www.springframework.org/schema/beans"
12 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
13 xmlns:jaxrs="http://cxf.apache.org/jaxrs"
14 xmlns:context="http://www.springframework.org/schema/context"
15 xmlns:cxf="http://cxf.apache.org/core"
16 xmlns:jee="http://www.springframework.org/schema/jee"
17 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
18 http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
19 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
20 http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
21 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
22
23 <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean" >
24 <property name="converters">
25 <set>
26 <bean id="stringToMapConverter" class="com.hardis.common.StringToMapConverter" />
27 </set>
28 </property>
29 </bean>
30
31 <jee:jndi-lookup id="jettisonConfProperties" jndi-name="java:comp/env/url/jettisonConf" resource-ref="true"/>
32
33 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" depends-on="jettisonConfProperties">
34 <property name="ignoreUnresolvablePlaceholders" value="true"/>
35 <property name="properties" ref="jettisonConfProperties"/>
36 </bean>
37
38 <bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
39 <property name="dropRootElement" value="${jettisonProvider.dropRootElement}"/>
40 <property name="serializeAsArray" value="${jettisonProvider.serializeAsArray}"/>
41 <property name="arrayKeys" value="${jettisonProvider.arrayKeys}"/>
42 <property name="supportUnwrapped" value="${jettisonProvider.supportUnwrapped}"/>
43 </bean>
44 </beans>
45 {{/code}}
46
47
48 Pour l'externalisation des propriétés, le fichier //beans.xml //ci-dessus déclare les éléments suivants :
49 * <**jee:jndi-lookup** id~="jettisonConfProperties" jndi-name~="**java:comp/env/url/jettisonConf**" resource-ref~="true"/>
50 Permet de désigner le nom de la ressource JNDI utilisée pour la recherche du fichier externalisé.
51
52
53 * <**bean** id~="propertyConfigurer" class~="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" depends-on~="jettisonConfProperties">
54 <property name~="ignoreUnresolvablePlaceholders" value~="true"/>
55 <property name~="properties" ref~="jettisonConfProperties"/>
56 </bean>
57 Permet de déclarer un objet //PropertyPlaceholderConfigurer// s'appuyant sur le fichier externalisé des valeurs propriétés pour la substitution dans le fichier //beans.xml//.
58
59
60 * <**bean** id~="conversionService" class~="org.springframework.context.support.ConversionServiceFactoryBean" >
61 <property name~="converters">
62 <set>
63 <bean id~="stringToMapConverter" class~="com.hardis.common.StringToMapConverter" />
64 </set>
65 </property>
66 </bean>
67 Permet d'activer par défaut les convertisseurs nécessaires pour l'évaluation des valeurs des propriétés et déclare un convertisseur spécifique d'une //String// vers un objet //Map//.
68
69 Exemple (convertisseur //[String// → //List//], une chaîne composée de plusieurs chaînes séparées par une virgule est convertie en un objet //List//), :
70 ...
71
72 <property name~="arrayKeys" value~="**${jettisonProvider.arrayKeys}**"/>
73 ...
74
75 **jettisonProvider.arrayKeys**~=//implantations//, //products//
76
77 Equivaut à :
78
79 <property name~="**arrayKeys**">
80 <list>
81 <value>//implantations//</value>
82 <value>//products//</value>
83 </list>
84 </property>
85
86
87
88
89
90 L'ensemble des couples (identifiant, valeur) sont regroupés dans un fichier .properties.
91 Exemple : jettisonConf.properties
92
93
94 {{code language="none"}}
95 jettisonProvider.dropRootElement=true
96 jettisonProvider.serializeAsArray=true
97 jettisonProvider.supportUnwrapped=true
98 jettisonProvider.arrayKeys=implantations, products
99 {{/code}}
100
101
102
103 Exemple d'une propriété avec pour valeur une //map// d'éléments :
104 **JWTADELIALOGINMODULE.adeliaParameters**~=[VAAuthProgram:com.hardis.adelia.HFAUWS][SSOEnabled:false][Unicode:true]
105
106 Equivaut à :
107
108 <property name~="**adeliaParameters**">
109 <map>
110 <entry key~="VAAuthProgram" value~="com.hardis.adelia.HFAUWS" />
111 <entry key~="SSOEnabled" value~="false" />
112 <entry key~="Unicode" value~="true" />
113 </map>
114 </property>
115
116
117
118 Déclaration de la ressource JNDI de façon globale ou propre au contexte de l'application web dans la configuration de Tomcat ($TOMCAT_HOME/conf/server.xml ou $TOMCAT_HOME/conf/Catalina/localhost/contextRoot.xml).
119
120 Exemple : Déclaration de la ressource JNDI propre au contexte de l'application nommée //mywebapp//.
121 Le nom de la ressource JNDI est : **url/jettisonConf**
122 L'emplacement du fichier externalisé des propriétés est : **c:/conf/jettisonConf.properties**
123
124
125 {{code language="none"}}
126 <Context path="/mywebapp" docBase="D:\webapps\mywebapp">
127 <Resource auth="Container" factory="com.hardis.common.JndiURLPropsFactory" name="url/jettisonConf" type="java.net.URL" url="file:///c:/conf/jettisonConf.properties"/>
128 </Context>
129 {{/code}}
130
131
132
133 **Remarques** :
134 1. Il est possible de scinder la configuration dans plusieurs fichiers properties afin d'assurer un découpage fonctionnel.
135 Par exemple, si une même application joue le rôle de serveur de jetons et de serveur de services, il est possible d'avoir un fichier de configuration propre à la production de jetons et un autre fichier de configuration propre à l'exposition des services.
136 Dans ce découpage, 2 ressources JNDI devront être créées, le fichier beans.xml devant alors déclarer 2 <jndi-lookup> et 2 <propertyConfigurer>.
137
138
139 1. Lorsque les valeurs sont externalisées, il faut faire attention à :11. Remplacer les entités XML par leurs propres : //&amp;// devient //&//
140 11. Doubler les anti-slash : //hardis\domaine// devient //hardis\\domaine//
141
142
143
144