You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/03/21 09:47:53 UTC

[3/5] git commit: CAMEL-7231: Support receiving attachments with Spring-WS

CAMEL-7231: Support receiving attachments with Spring-WS


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/114de369
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/114de369
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/114de369

Branch: refs/heads/camel-2.13.x
Commit: 114de369714c790252dfe6d1c193b6a830a02c08
Parents: e9ab2b9
Author: Richard Kettelerij <r....@avisi.nl>
Authored: Mon Mar 17 15:45:10 2014 +0100
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Mar 21 15:57:10 2014 +0800

----------------------------------------------------------------------
 .../spring/ws/SpringWebserviceConsumer.java     | 25 ++++++++++++++++----
 1 file changed, 20 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/114de369/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
index 4a5ee7d..5514ff5 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
@@ -32,6 +32,8 @@ import org.apache.camel.impl.DefaultConsumer;
 import org.apache.camel.impl.DefaultExchange;
 import org.springframework.ws.WebServiceMessage;
 import org.springframework.ws.context.MessageContext;
+import org.springframework.ws.mime.Attachment;
+import org.springframework.ws.mime.MimeMessage;
 import org.springframework.ws.server.endpoint.MessageEndpoint;
 import org.springframework.ws.soap.SoapHeader;
 import org.springframework.ws.soap.SoapHeaderElement;
@@ -44,7 +46,7 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
 
     public SpringWebserviceConsumer(Endpoint endpoint, Processor processor) {
         super(endpoint, processor);
-        this.endpoint = (SpringWebserviceEndpoint) endpoint;
+        this.endpoint = (SpringWebserviceEndpoint)endpoint;
         this.configuration = this.endpoint.getConfiguration();
     }
 
@@ -81,10 +83,12 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
         WebServiceMessage request = messageContext.getRequest();
         SpringWebserviceMessage inMessage = new SpringWebserviceMessage(request);
         extractSourceFromSoapHeader(inMessage.getHeaders(), request);
+        extractAttachmentsFromRequest(request, inMessage);
         exchange.setIn(inMessage);
     }
 
-    private void populateExchangeWithPropertiesFromMessageContext(MessageContext messageContext, Exchange exchange) {
+    private void populateExchangeWithPropertiesFromMessageContext(MessageContext messageContext,
+                                                                  Exchange exchange) {
         // convert WebserviceMessage properties (added through interceptors) to
         // Camel exchange properties
         String[] propertyNames = messageContext.getPropertyNames();
@@ -100,12 +104,12 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
      * it as a header with the key SpringWebserviceConstants.SPRING_WS_SOAP_HEADER
      * and a value of type Source.
      *
-     * @param headers   the Exchange Headers
-     * @param request   the WebService Request
+     * @param headers the Exchange Headers
+     * @param request the WebService Request
      */
     private void extractSourceFromSoapHeader(Map<String, Object> headers, WebServiceMessage request) {
         if (request instanceof SoapMessage) {
-            SoapMessage soapMessage = (SoapMessage) request;
+            SoapMessage soapMessage = (SoapMessage)request;
             SoapHeader soapHeader = soapMessage.getSoapHeader();
 
             if (soapHeader != null) {
@@ -131,6 +135,17 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
         }
     }
 
+    private void extractAttachmentsFromRequest(final WebServiceMessage request,
+                                               final SpringWebserviceMessage inMessage) {
+        if (request instanceof MimeMessage) {
+            Iterator<Attachment> attachmentsIterator = ((MimeMessage)request).getAttachments();
+            while (attachmentsIterator.hasNext()) {
+                Attachment attachment = attachmentsIterator.next();
+                inMessage.addAttachment(attachment.getContentId(), attachment.getDataHandler());
+            }
+        }
+    }
+
     @Override
     protected void doStop() throws Exception {
         if (configuration.getEndpointMapping() != null) {