J'essaie de configurer le service de service Web à l'aide de Mule ESB.
Je tente de le faire à l'aide de WSProxService de Mule, mais après avoir progressé le code correspondant (avec le débogueur), il est clair que cette classe remplace les adresses de terminaux . P>
Le problème concerne les adresses Spring-WS WSDL sont du style http: //xxxx/xxxx.wsdl , mais wsproxystervice attend http: // xxxx / xxxx? wsdl ou http: // xxxx / xxxx & wsdl . Il remplace les adresses du point d'extrémité distantes avec l'adresse WSDL locale; Il coupe l'adresse WSDL distante au point de question I.E. '? WSDL' est destinée à être coupée, afin de créer le terme de recherche. Mais à cause du printemps-ws, cela ne fonctionne pas. P>
pour le casser: p>
wsproxyservice finit par essayer d'utiliser p> avec p> qui échoue ... menant à un service de service Web réel Aller directement et non à travers le proxy. p> a-t-il déjà remarqué / résolu ce problème ?? p> acclamations, Darren P> P>
4 Réponses :
Ceci peut être applicable: P>
http://forum.springsource.org/showpost.php?p = 101967 & postcount = 4 p>
Non, le? WSDL est un moyen d'obtenir un WSDL d'une classe. Dans SWS, un service n'est pas mis en œuvre comme une classe. P> blockQuote>
Eh bien, il y a un soupçon de solution de contournement, mais vous perdriez alors toute la bonté dynamique du Springy - et j'ai déjà fait cela à la fin du mulet - pas vraiment une solution. Vraiment, je suis juste un peu déçu qu'il n'existe pas un attribut simple sur un élément qui déclare l'utilisation d'un "?".
Que diriez-vous d'un filtre de servlet devant le servlet Spring WS qui vérifie l'URL et les paramètres?
En cas de correspondance, vous renvoyez le WSDL, sinon vous laissez la demande comme si rien ne s'est passé. P>
Cela devrait être trivial à mettre en œuvre et remplira votre besoin, si vous devez absolument avoir l'URL du WS +? WSDL annexé à celui-ci. P>
Voici le code: P>
Vous pouvez créer une classe qui implémente filtre code>, créer
dofilter code> méthode qui intercepte la demande et obtenez l'URL si elle se termine par
"wsdl" code >, puis transmettez la demande d'URL par défaut de ressort
". WSDL" code> Nettoyage de la chaîne de requête. Quelque chose comme ceci:
Vous pouvez également utiliser un HTTPServletReQuestWrapper pour gérer l'extension WSDL et permettre au serveur de gérer la demande:
@Component public class WsdlQuestionMarkSuffixFilter implements javax.servlet.Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; if ("wsdl".equalsIgnoreCase(httpRequest.getQueryString())) { HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(httpRequest) { @Override public String getQueryString() { return null; } @Override public String getRequestURI() { return super.getRequestURI() + ".wsdl"; } }; chain.doFilter(requestWrapper, response); } else { chain.doFilter(request, response); } } @Override public void destroy() { } }
Désolé, changé "fonctionne" pour "ne fonctionne pas"
Le
? WSDL code> La convention de nommage est une .NET une. Si Mule insiste sur cette convention, elle se limite efficacement aux services Web .NET.
Absurdité. Mule est (apparemment) le système d'exploitation le plus populaire au monde ESB. C'est Java. Il utilise '?'. Axe, éventuellement le cadre Standard de Defacto WS en Java, utilise également le '?' convention. Et JAX-WS utilise également '?'. Je ne vis pas dans le monde .Net, donc je ne saurais pas ce que les conventions .Net sont. Néanmoins, Spring-WS est le premier cas pour moi où le WSDL est exposé avec autre chose qu'un "?".