2017-10-05 4 views
1

J'utilise Spring Integration dans un projet qui intègre (avec succès) divers points de terminaison ReST/JSON et SOAP. Maintenant, je dois appeler une instance BusinessWorks configurée pour accepter Plain-Old-Xml-over-HTTP. À partir du livre «Spring Integration in Action», j'ai compris que je devrais utiliser int-ws: outbound-gateway pour cela. Cette configuration génère la demande correcte, mais dans SOAP:Appelez le service Web POX depuis Spring Integration

<int-ws:outbound-gateway 
    uri="..." 
    request-channel="request" reply-channel="reply" 
    marshaller="marshaller" unmarshaller="unmarshaller"/> 

Je ne peux pas comprendre comment configurer cette option pour envoyer l'objet dans la charge utile comme POX (pas d'enveloppe SOAP). Je essayé ceci:

<int-ws:outbound-gateway 
    uri="..." 
    request-channel="request" reply-channel="reply" 
    marshaller="marshaller" unmarshaller="unmarshaller" 
    message-factory="poxMessageFactory"/> 
<bean id="poxMessageFactory" 
    class="org.springframework.ws.pox.dom.DomPoxMessageFactory"/> 

La demande semble passer correctement au format XML seulement, mais le corps de la requête est vide (aucune trace de l'objet présent dans la charge utile d'intégration de printemps). Quelqu'un peut-il me dire ce que je fais mal ou comment réaliser ce que j'essaie de faire?

Répondre

0

Je pense que cela est une omission dans le AbstractWebServiceOutboundGateway:

public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { 
     Object payload = this.requestMessage.getPayload(); 
     if (message instanceof SoapMessage) { 
      this.doWithMessageInternal(message, payload); 
      AbstractWebServiceOutboundGateway.this.headerMapper 
        .fromHeadersToRequest(this.requestMessage.getHeaders(), (SoapMessage) message); 
      if (this.requestCallback != null) { 
       this.requestCallback.doWithMessage(message); 
      } 
     } 

    } 

attention à la if (message instanceof SoapMessage) {. Donc, en effet, il nous manque là le fait que le message peut être de type différent.

S'il vous plaît, ouvrez JIRA bug sur le sujet.

Pendant ce temps comme une solution, je vous suggère d'utiliser WebServiceTemplate directement au lieu de <int-ws:outbound-gateway> vous pouvez l'appeler de la <service-activator> en utilisant la méthode marshalSendAndReceive() d'interaction.

+0

Merci beaucoup! Je pense que cette réponse officielle ferme le sujet :-) J'ai ouvert le bug JIRA. Je n'ai fait qu'une tentative rapide d'utiliser la solution de contournement mais comme le service que nous appelons est géré dans la même entreprise, ils ont accepté de reconfigurer le service pour accepter SOAP. –

+0

Bien sûr! Le JIRA https://jira.spring.io/browse/INT-4355 a été corrigé récemment. Nous pouvons libérer la prochaine version de maintenance dès que possible si vous en avez besoin –

+0

Oh! Désolé, j'ai raté ce dernier commentaire. Merci beaucoup, mais maintenant nous pouvons attendre une livraison dans la prochaine version. –