2010-10-12 19 views
1

J'ai un service Web Spring basé sur AbstractJDomPayloadEndpoint. Ce service fonctionne correctement, sauf que mon client a besoin que l'en-tête HTTP Content-Type soit défini sur le charset approprié (utf-8 dans mon cas). Je ne peux pas trouver où je peux configurer cela.Spring-WS: spécification du type de contenu

J'ai essayé d'écrire simple servlet Filter:

chain.doFilter(request, response); 
HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("Content-Type", "text/xml; charset=utf-8"); 

Mais cela ne marche pas changer les en-têtes du tout. Je soupçonne que l'en-tête du type de contenu est défini par Spring-WS, et la réponse est validée, donc rien de ce que je définis dans un filtre n'aura d'impact.

Mon serveur d'applications est WebLogic 9.2.3.

Répondre

1

Oui, votre code de filtre échouera car au moment où doFilter() se termine, la réponse aura été entièrement validée, et vous ne serez pas autorisé à modifier l'en-tête de type de contenu.

Je suggère d'écrire une sous-classe de HttpServletResponseWrapper, en remplaçant les méthodes setContentType() et/ou setCharacterEncoding() pour définir la valeur à celle que vous voulez. Vous passez ensuite l'instance du wrapper (qui enveloppe la réponse d'origine) au doFilter().

+1

Merci! Pourquoi n'ai-je pas pensé à un HttpServletResponseWrapper? Pourtant, ce serait bien d'avoir un moyen de configurer Spring-WS pour utiliser le bon encodage directement ... – Guillaume