2009-12-16 6 views
1

J'essaie de consommer l'interface du service Web Exchange 2010 à l'aide de JAX-WS. J'utilise JAX-WS 2.2 RI (Metro 2.0). 2.1 présentait le même problème.Problème de consommation du service Web Exchange 2010 avec jax-ws metro

Je rencontre des problèmes avec Exchange, qui renvoie "HTTP/1.1 415 Impossible de traiter le message car le type de contenu 'text/xml; charset = utf-8' n'était pas le type attendu 'text/xml; charset = utf-8 '. " en réponse (2.1 a cité la valeur du jeu de caractères, sinon la même réponse).

Apparemment, je dois dicter l'en-tête Content-type exact pour que Exchange soit heureux.

Y at-il un moyen pour moi de le faire sans me forcer à reconstruire manuellement la dépendance? Je compte actuellement sur les artefacts maven publiés, et je voudrais continuer à le faire si possible.

Le processus de consommation est une application J2SE normale, sans conteneurs en vue. J'ai le contrôle de l'application et peux ajouter à peu près tout ce qui est nécessaire à la portée des applications, mais je ne peux pas ajouter d'éléments hors processus comme les serveurs proxy. Les classes clientes ont été générées à partir de WSDL local, mais la spécification charset est dérivée des constantes déclarées dans l'implémentation RI jaxws, pas du code généré. Le transport HTTP résultant est ainsi géré par le client http/https standard de Sun JRE5 ou JRE6.

Répondre

1

De this thread (donnant un lien mis en cache, car actuellement les forums java.net sont en baisse), il semble que la faute est en fin de compte que vos services Web Exchange 2010 demande un espace après la virgule - quelque chose pas partie de la spécification w3c.

Une solution pourrait être de mettre quelque chose (en fonction de votre configuration) devant le métro pour changer l'en-tête.

Vous pouvez essayer quelques-unes des approches suivantes:

  • utiliser la réflexion pour changer la constante de métro.
  • Utilisez AOP (je ne peux pas vous dire exactement comment)
  • Voyez où est cette constante définie dans la région métropolitaine, créer un package javax.xml.ws.etc (ou com.sun.etc.. dans vos sources, et copier-coller la source de cette classe, en changeant la
+0

Oui, je suis conscient de l'espace étant le problème, d'où la raison pour laquelle je suis à la recherche d'un moyen de contrôler l'en-tête de type content.J'ai raté celui-ci parmi les de personnes avec des mismatches de type mime. –

Questions connexes