You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2008/02/27 07:22:00 UTC

svn commit: r631496 - in /servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc: CxfBcProvider.java interceptors/JbiOutInterceptor.java

Author: ffang
Date: Tue Feb 26 22:21:59 2008
New Revision: 631496

URL: http://svn.apache.org/viewvc?rev=631496&view=rev
Log:
[SM-1232] put attachment handle into interceptor

Added:
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java   (with props)
Modified:
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java

Modified: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java?rev=631496&r1=631495&r2=631496&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java (original)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java Tue Feb 26 22:21:59 2008
@@ -20,12 +20,10 @@
 import java.io.OutputStream;
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.logging.Logger;
 
-import javax.activation.DataHandler;
 import javax.jbi.management.DeploymentException;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
@@ -40,7 +38,6 @@
 import com.ibm.wsdl.Constants;
 
 import org.apache.cxf.Bus;
-import org.apache.cxf.attachment.AttachmentImpl;
 import org.apache.cxf.binding.AbstractBindingFactory;
 import org.apache.cxf.binding.soap.SoapMessage;
 
@@ -55,7 +52,6 @@
 import org.apache.cxf.interceptor.StaxOutInterceptor;
 
 
-import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
@@ -73,9 +69,9 @@
 import org.apache.cxf.transport.jbi.JBIMessageHelper;
 import org.apache.cxf.wsdl11.WSDLServiceFactory;
 import org.apache.servicemix.common.endpoints.ProviderEndpoint;
+import org.apache.servicemix.cxfbc.interceptors.JbiOutInterceptor;
 import org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor;
 import org.apache.servicemix.cxfbc.interceptors.MtomCheckInterceptor;
-import org.apache.servicemix.jbi.messaging.NormalizedMessageImpl;
 import org.apache.servicemix.soap.util.DomUtil;
 import org.springframework.core.io.Resource;
 
@@ -150,18 +146,10 @@
         PhaseManager pm = getBus().getExtension(PhaseManager.class);
         List<Interceptor> outList = new ArrayList<Interceptor>();
         if (isMtomEnabled()) {
-            List<Attachment> attachmentList = new ArrayList<Attachment>();
-            NormalizedMessageImpl norMessage = (NormalizedMessageImpl)nm;
-            Iterator<String> iter = norMessage.listAttachments();
-            while (iter.hasNext()) {
-                String id = iter.next();
-                DataHandler dh = norMessage.getAttachment(id);
-                attachmentList.add(new AttachmentImpl(id, dh));
-            }
+            outList.add(new JbiOutInterceptor());
             outList.add(new MtomCheckInterceptor(true));
             outList.add(new AttachmentOutInterceptor());
-            message.setAttachments(attachmentList);
-            message.put(Message.CONTENT_TYPE, "application/octet-stream");
+            
         }
         
         

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java?rev=631496&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java Tue Feb 26 22:21:59 2008
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.cxfbc.interceptors;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.activation.DataHandler;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.attachment.AttachmentImpl;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.headers.Header;
+import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.servicemix.cxfbc.WSAUtils;
+import org.apache.servicemix.soap.util.QNameUtil;
+
+public class JbiOutInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    public JbiOutInterceptor() {
+        super(Phase.PRE_STREAM);
+    }
+
+    public void handleMessage(Message message) {
+        MessageExchange me = message.get(MessageExchange.class);
+        NormalizedMessage nm = me.getMessage("in");
+        fromNMSAttachments(message, nm);
+        fromNMSHeaders(message, nm);
+
+    }
+
+    /**
+     * Copy NormalizedMessage attachments to SoapMessage attachments
+     */
+    private void fromNMSAttachments(Message message,
+            NormalizedMessage normalizedMessage) {
+        Set attachmentNames = normalizedMessage.getAttachmentNames();
+        Collection<Attachment> attachmentList = new ArrayList<Attachment>();
+        for (Iterator it = attachmentNames.iterator(); it.hasNext();) {
+            String id = (String) it.next();
+            DataHandler handler = normalizedMessage.getAttachment(id);
+            Attachment attachment = new AttachmentImpl(id, handler);
+            attachmentList.add(attachment);
+        }
+        message.setAttachments(attachmentList);
+        message.put(Message.CONTENT_TYPE, "application/soap+xml");
+    }
+
+    /**
+     * Copy NormalizedMessage headers to SoapMessage headers
+     */
+    @SuppressWarnings("unchecked")
+    private void fromNMSHeaders(Message message,
+            NormalizedMessage normalizedMessage) {
+
+        if (message instanceof SoapMessage) {
+
+            Map<String, String> map = (Map<String, String>) normalizedMessage
+                    .getProperty(WSAUtils.WSA_HEADERS_INBOUND);
+
+            if (map != null) {
+                AddressingProperties addressingProperties = WSAUtils
+                        .getCXFAddressingPropertiesFromMap(map);
+                ((SoapMessage) message).put(WSAUtils.WSA_HEADERS_INBOUND,
+                        addressingProperties);
+            }
+        }
+
+        if (normalizedMessage.getProperty(JbiConstants.PROTOCOL_HEADERS) != null) {
+            Map<String, ?> headers = (Map<String, ?>) normalizedMessage
+                    .getProperty(JbiConstants.PROTOCOL_HEADERS);
+            for (Map.Entry<String, ?> entry : headers.entrySet()) {
+                QName name = QNameUtil.parse(entry.getKey());
+                if (name != null) {
+
+                    Header header = new Header(name, entry.getValue());
+
+                    if (message instanceof SoapMessage) {
+                        List<Header> headerList = ((SoapMessage) message)
+                                .getHeaders();
+                        headerList.add(header);
+                    }
+
+                } 
+            }
+        }
+    }
+
+}

Propchange: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date