2011-02-03 3 views
0

J'essaie de personnaliser le contexte du servlet spring-ws de la même manière que pour mon contexte printanier. Pour le contexte initial (initialisé au démarrage du serveur), j'ai étendu le ContextLoader et implémenté la classe ServletContextListener, ce qui est similaire à ce que fait la classe org.springframework.web.context.ContextLoaderListener. Je suis capable de personnaliser le contexte initial en remplaçant la méthode customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext) et d'ajouter/supprimer des fichiers xml de contexte facultatifs en fonction des propriétés. J'ai été en mesure de définir cette classe comme écouteur dans mon fichier web.xml au lieu de la valeur par défaut ContextLoaderListener de Spring, et cela fonctionne comme prévu.Contexte personnalisé dans Spring-WS

Je cherche à adopter une approche similaire pour le contexte de servlet spring-ws (tous les beans définis dans WEB-INF\spring-ws-servlet.xml), mais je n'ai pas trouvé de solution à ce problème. La seule chose que je peux penser est de faire en sorte que mon chargeur de contexte personnalisé génère aussi un fichier xml avec les beans 'facultatifs' à inclure, et que le contexte spring-ws-servlet l'importe. Cependant, il s'agit d'une solution de piratage et je pense qu'il doit y avoir une meilleure approche. Est-ce que quelqu'un a des suggestions sur la façon de personnaliser le contexte de servlet spring-ws lorsque le premier service web est appelé?

J'utilise Spring 2.5.6 & Spring-WS 1.5.9

Merci à l'avance.

+0

Je ne suis pas sûre de vous suivre. La logique 'ContextLoaderListener' s'applique aux contextes Webbapp racine, pas aux contextes servlet. Les servlets Spring-WS peuvent toujours accéder au contexte webapp racine comme vous l'avez fait précédemment avec vos servlets Spring standard. – skaffman

+0

Vous pouvez déclarer un fichier XML distinct dans lequel vous pouvez déclarer vos beans Spring-WS. Voici un exemple http://krams915.blogspot.com/2010/12/spring-ws-2-and-spring-3-mvc.html Celui-ci utilise Spring Framework 3.xx et Spring WS 2.xx – chris

+0

Merci à la fois de vous pour vos réponses. Je comprends que la logique ContextLoaderListener s'applique aux contextes de la Webapp racine, pas les contextes de servlet. J'essaie de personnaliser les contextes de servlet. EX- J'ai plusieurs beans définis dans mon context.xml. Ces beans sont chargés avec le contexte webapp racine. Ensuite, j'ai des points de terminaison définis comme des beans dans mon spring-ws-context.xml. Certains de ces points de terminaison ne sont pas nécessaires sauf si une certaine propriété est vraie ou fausse, donc je ne veux pas les charger. Je veux personnaliser le contexte de servlet (défini dans spring-ws-servlet). Endpoints mappés à l'aide d'annotations. – Steve

Répondre

0

J'ai été capable de trouver une solution à cela. J'ai créé une classe qui a étendu le MessageDispatcherServlet et remplacer la méthode postProcessWebApplicationContext. Dans cette méthode, j'ajoute conditionnellement dans mes contextes optionnels des emplacements en fonction de mes propriétés. Une fois cette méthode appelée, le parent appelle la méthode refresh() sur le contexte et les contextes supplémentaires sont chargés.

Une autre solution m'a suggéré de créer un espace de noms personnalisé et de créer un gestionnaire d'espace de noms pour effectuer les importations si les conditions étaient remplies.

Questions connexes