Comment consommer un web service SOAP dans un Mulet de Flux?
Je commence avec Mule flux et vous avez vu la j'ai vu cette page http://www.mulesoft.org/documentation/display/MULE3CONCEPTS/Using+Mule+avec+Web+Services et http://www.mulesoft.org/documentation/display/MULEWS/Consuming+SAVON+Web+Services+en+de Mule cette oe trop. Ils n'ont pas été d'une grande aide. Actuellement, j'ai une simple mule flux comme indiqué ci-dessous.
Définition de flux
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
<flow name="EchoFlow" doc:name="EchoFlow">
<http:inbound-endpoint exchange-pattern="request-response"
host="localhost" port="8081" path="service/echoflow" doc:name="HTTP" />
<cxf:jaxws-client operation="" serviceClass="com.myapp.demo.ServiceAImplService"
doc:name="SOAP"/>
<outbound-endpoint address="http://localhost:8080/ServiceA/services/" doc:name="Generic"/>
</flow>
</mule>
Je suis à l'aide de Mule studio. Il y a un HTTP entrante point de terminaison qui attend une réponse. J'ai essayé de configurer un jax-ws client qui va appeler le service web réelle. Le WSDL du service est:
fichier wsdl
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="ServiceAImplService" targetNamespace="http://service.demo.myapp.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.demo.myapp.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.demo.myapp.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import namespace="http://service.demo.myapp.com/" schemaLocation="http://localhost:8080/ServiceA/services/ServiceAImplPort?xsd=serviceaimpl_schema1.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="helloResponse">
<wsdl:part element="tns:helloResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="hello">
<wsdl:part element="tns:hello" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="IServiceA">
<wsdl:operation name="hello">
<wsdl:input message="tns:hello" name="hello">
</wsdl:input>
<wsdl:output message="tns:helloResponse" name="helloResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ServiceAImplServiceSoapBinding" type="tns:IServiceA">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<soap:operation soapAction="urn:Hello" style="document"/>
<wsdl:input name="hello">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="helloResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ServiceAImplService">
<wsdl:port binding="tns:ServiceAImplServiceSoapBinding" name="ServiceAImplPort">
<soap:address location="http://localhost:8080/ServiceA/services/ServiceAImplPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Je ne suis pas trop sûr au sujet de la configuration d'un jax-ws client comme vous pouvez le voir. Alors, comment exactement ce que je consommer un web service SOAP dans ce flux.
Ma deuxième question: Comment puis-je transformer la charge utile de faire un appel à partir d'un web-service à un autre, web services (SOAP). Quel sera le débit?
Et enfin, comment puis-je fusionner les charges? Dites, j'ai trois services web appelé en parallèle et leurs réponses reviennent tous ensemble. Comment puis-je fusionner les charges utiles afin que je puisse le lire dans un autre service (après combinaison des réponses de plusieurs services en parallèle)?
Quel est l'équivalent de la mise en œuvre de
<pattern:web-service-proxy name="ex-proxy"
inboundAddress="http://localhost:8081/xxx"
outboundAddress="http://xx.xx.com/XXX_WS/xxxWService.asmx" />
à l'aide de CXF de proxy de service/client? Et cela m'amène à une autre question, quand utiliser CXF-service et lors de l'utilisation de CXF-client? Et enfin, est-il une documentation détaillée ou d'exemple/un tutoriel pour la Mule de Flux de l'Orchestration?
Je suis conscient des composants. Cependant, je ne suis pas en mesure de tom configurer correctement car il n'y a pas de documentation/exemple! Un simple CXF proxy exemple ira un long chemin en aidant à moi. Je ne vais jamais demander autour pour le code, mais je suis coincé avec ce pour une semaine, sans aucun progrès!
Je vois que le fonctionnement de l'attribut de jaxws-client "", ce qui peut ne pas être juste. Avez-vous essayé avec l'aide de "bonjour" à la place? Quelle est l'erreur que vous obtenez?
Eh bien, j'ai déménagé à plus judicieux exemple depuis (non pas un de ces ServiceA ServiceB spaghetti). Aussi, j'ai pris @petter conseils et vais pour proxy à l'aide de CXF. Mais un coup d'oeil à cette page mulesoft.org/documentation/display/MULE3USER/... et je suis encore perdu! Je suis la mise à jour de la question.
cxf:jaxws-service pour exposer des services web de Mule de JAX-WS/JAXB annoté classes. cxf:jaxws-client est de la consommation à distance de services web qui les lient à JAX-WS/JAXB annoté classes.
OriginalL'auteur r3st0r3 | 2012-04-07
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser un CXF proxy (le client et les services). Dans ce cas, vous obtiendrez le XML brut dans le flux. Bien sûr, vous pouvez désérialiser de java si vous devez, par exemple via XML-Objet transformateur (XStream).
http://www.mulesoft.org/documentation/display/MULE3USER/Proxying+Web+Services+avec+CXF
À partir de là, il y a plusieurs façons de le faire transformer la charge dans le milieu. Soit passer par java (comme mentionné ci-dessus) et de transformer java les objets de la couche ou d'écrire une feuille XSLT qui ne la transformation.Ou de transformer le XML en Java et/ou l'autre des outils de Mule (script, xpath, etc).
Vous pourriez vouloir expliquer l'agrégation de cas une fois de plus dans les détails. Voulez-vous fusionner les réponses pour l'avenir d'utiliser ou d'avoir un appel de service web -> fan -> agrégat -> réponse?
C'est peut-être une autre question. Mais généralement invoquer certains async processus comme une machine virtuelle systèmes d'extrémité, la file d'attente, async portée etc avant de retourner la réponse. Poursuivre le traitement dans la async/thread séparé.
OriginalL'auteur Petter Nordlander
1) en règle générale, vous devez utiliser le "Service de Proxy" au lieu de "JAX-WS" pour consommer un service web distant.
2) Utiliser le chaînage des routeurs pour passer réponses entre plusieurs ordinateurs d'extrémité.
OriginalL'auteur babybug
Si vous avez accès à la point de Terminaison de Service Interface de la Web-Service, vous pouvez facilement consommer le Web Service en Java simple-Composant comme ceci:
Espère que cela aide...
OriginalL'auteur Pascal