From commits-return-14303-apmail-servicemix-commits-archive=servicemix.apache.org@servicemix.apache.org Thu May 13 07:44:03 2010 Return-Path: Delivered-To: apmail-servicemix-commits-archive@www.apache.org Received: (qmail 35714 invoked from network); 13 May 2010 07:44:03 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 13 May 2010 07:44:03 -0000 Received: (qmail 57065 invoked by uid 500); 13 May 2010 07:44:02 -0000 Delivered-To: apmail-servicemix-commits-archive@servicemix.apache.org Received: (qmail 56996 invoked by uid 500); 13 May 2010 07:44:02 -0000 Mailing-List: contact commits-help@servicemix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@servicemix.apache.org Delivered-To: mailing list commits@servicemix.apache.org Received: (qmail 56988 invoked by uid 99); 13 May 2010 07:44:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 13 May 2010 07:44:02 +0000 X-ASF-Spam-Status: No, hits=-1512.3 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 13 May 2010 07:44:00 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 37253238897F; Thu, 13 May 2010 07:43:40 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r943835 - in /servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src: main/java/org/apache/servicemix/cxf/transport/nmr/ test/java/org/apache/servicemix/cxf/transport/nmr/ Date: Thu, 13 May 2010 07:43:40 -0000 To: commits@servicemix.apache.org From: ffang@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100513074340.37253238897F@eris.apache.org> Author: ffang Date: Thu May 13 07:43:39 2010 New Revision: 943835 URL: http://svn.apache.org/viewvc?rev=943835&view=rev Log: [SMX4-527] cxf nmr transport should copy over property headers and attachment between cxf message and nmr message Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitOutputStream.java servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestination.java servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationOutputStream.java servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitTest.java servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationTest.java Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitOutputStream.java URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitOutputStream.java?rev=943835&r1=943834&r2=943835&view=diff ============================================================================== --- servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitOutputStream.java (original) +++ servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitOutputStream.java Thu May 13 07:43:39 2010 @@ -21,19 +21,25 @@ package org.apache.servicemix.cxf.transp import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.lang.reflect.Member; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; +import javax.activation.DataHandler; import javax.jws.WebService; import javax.xml.namespace.QName; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; +import org.apache.cxf.attachment.AttachmentImpl; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.message.Attachment; import org.apache.cxf.message.Exchange; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; @@ -114,6 +120,26 @@ public class NMRConduitOutputStream exte LOG.info(new org.apache.cxf.common.i18n.Message("EXCHANGE.ENDPOINT", LOG).toString() + serviceName); LOG.info("setup message contents on " + inMsg); inMsg.setBody(getMessageContent(message)); + //copy attachments + if (message != null && message.getAttachments() != null) { + for (Attachment att : message.getAttachments()) { + inMsg.addAttachment(att.getId(), att + .getDataHandler()); + } + } + + //copy properties + for (Map.Entry ent : message.entrySet()) { + //check if value is Serializable, and if value is Map or collection, + //just exclude it since the entry of it may not be Serializable as well + if (ent.getValue() instanceof Serializable + && !(ent.getValue() instanceof Map) + && !(ent.getValue() instanceof Collection)) { + inMsg.setHeader(ent.getKey(), ent.getValue()); + } + } + + LOG.info("service for exchange " + serviceName); Map refProps = new HashMap(); @@ -126,10 +152,13 @@ public class NMRConduitOutputStream exte if (!isOneWay) { channel.sendSync(xchng); Source content = null; + org.apache.servicemix.nmr.api.Message nm = null; if (xchng.getFault(false) != null) { content = xchng.getFault().getBody(Source.class); + nm = xchng.getFault(); } else { content = xchng.getOut().getBody(Source.class); + nm = xchng.getOut(); } Message inMessage = new MessageImpl(); message.getExchange().setInMessage(inMessage); @@ -138,6 +167,20 @@ public class NMRConduitOutputStream exte throw new IOException(new org.apache.cxf.common.i18n.Message("UNABLE.RETRIEVE.MESSAGE", LOG).toString()); } inMessage.setContent(InputStream.class, ins); + //copy attachments + Collection cxfAttachmentList = new ArrayList(); + for (Map.Entry ent : nm.getAttachments().entrySet()) { + cxfAttachmentList.add(new AttachmentImpl(ent.getKey(), (DataHandler) ent.getValue())); + } + inMessage.setAttachments(cxfAttachmentList); + + //copy properties + for (Map.Entry ent : nm.getHeaders().entrySet()) { + if (!ent.getKey().equals(Message.REQUESTOR_ROLE)) { + inMessage.put(ent.getKey(), ent.getValue()); + } + } + conduit.getMessageObserver().onMessage(inMessage); xchng.setStatus(Status.Done); Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestination.java URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestination.java?rev=943835&r1=943834&r2=943835&view=diff ============================================================================== --- servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestination.java (original) +++ servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestination.java Thu May 13 07:43:39 2010 @@ -22,15 +22,20 @@ package org.apache.servicemix.cxf.transp import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import javax.activation.DataHandler; import javax.xml.namespace.QName; import javax.xml.transform.Source; +import org.apache.cxf.attachment.AttachmentImpl; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.message.Attachment; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.service.model.EndpointInfo; @@ -118,9 +123,23 @@ public class NMRDestination extends Abst MessageImpl inMessage = new MessageImpl(); inMessage.put(Exchange.class, exchange); - + final InputStream in = NMRMessageHelper.convertMessageToInputStream(nm.getBody(Source.class)); inMessage.setContent(InputStream.class, in); + //copy attachments + Collection cxfAttachmentList = new ArrayList(); + for (Map.Entry ent : nm.getAttachments().entrySet()) { + cxfAttachmentList.add(new AttachmentImpl(ent.getKey(), (DataHandler) ent.getValue())); + } + inMessage.setAttachments(cxfAttachmentList); + + //copy properties + for (Map.Entry ent : nm.getHeaders().entrySet()) { + if (!ent.getKey().equals(Message.REQUESTOR_ROLE)) { + inMessage.put(ent.getKey(), ent.getValue()); + } + } + inMessage.setDestination(this); getMessageObserver().onMessage(inMessage); @@ -160,7 +179,7 @@ public class NMRDestination extends Abst // setup the message to be send back Channel dc = channel; message.put(Exchange.class, inMessage.get(Exchange.class)); - message.setContent(OutputStream.class, new NMRDestinationOutputStream(inMessage, dc)); + message.setContent(OutputStream.class, new NMRDestinationOutputStream(inMessage, message, dc)); } protected Logger getLogger() { Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationOutputStream.java URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationOutputStream.java?rev=943835&r1=943834&r2=943835&view=diff ============================================================================== --- servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationOutputStream.java (original) +++ servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/main/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationOutputStream.java Thu May 13 07:43:39 2010 @@ -21,6 +21,9 @@ package org.apache.servicemix.cxf.transp import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; +import java.util.Collection; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -32,6 +35,7 @@ import org.w3c.dom.Document; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.message.Attachment; import org.apache.cxf.message.Message; import org.apache.servicemix.nmr.api.Channel; import org.apache.servicemix.nmr.api.Exchange; @@ -40,12 +44,15 @@ public class NMRDestinationOutputStream private static final Logger LOG = LogUtils.getL7dLogger(NMRDestinationOutputStream.class); private Message inMessage; + private Message outMessage; private Channel channel; public NMRDestinationOutputStream(Message m, + Message outM, Channel dc) { super(); inMessage = m; + outMessage = outM; channel = dc; } @@ -86,6 +93,26 @@ public class NMRDestinationOutputStream xchng.setError(f); } } else { + //copy attachments + if (outMessage != null && outMessage.getAttachments() != null) { + for (Attachment att : outMessage.getAttachments()) { + xchng.getOut().addAttachment(att.getId(), att + .getDataHandler()); + } + } + + //copy properties + for (Map.Entry ent : outMessage.entrySet()) { + //check if value is Serializable, and if value is Map or collection, + //just exclude it since the entry of it may not be Serializable as well + if (ent.getValue() instanceof Serializable + && !(ent.getValue() instanceof Map) + && !(ent.getValue() instanceof Collection)) { + xchng.getOut().setHeader(ent.getKey(), ent.getValue()); + } + } + + xchng.getOut().setBody(new DOMSource(doc)); } LOG.fine(new org.apache.cxf.common.i18n.Message("POST.DISPATCH", LOG).toString()); Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitTest.java URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitTest.java?rev=943835&r1=943834&r2=943835&view=diff ============================================================================== --- servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitTest.java (original) +++ servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRConduitTest.java Thu May 13 07:43:39 2010 @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.logging.Logger; import javax.xml.stream.XMLStreamReader; @@ -94,7 +95,9 @@ public class NMRConduitTest extends Abst Source source = new StreamSource(new ByteArrayInputStream( "TestHelloWorld".getBytes())); EasyMock.expect(outMsg.getBody(Source.class)).andReturn(source); - + EasyMock.expect(xchg.getOut()).andReturn(outMsg); + EasyMock.expect(outMsg.getAttachments()).andReturn(new HashMap()); + EasyMock.expect(outMsg.getHeaders()).andReturn(new HashMap()); control.replay(); try { conduit.prepare(message); Modified: servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationTest.java URL: http://svn.apache.org/viewvc/servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationTest.java?rev=943835&r1=943834&r2=943835&view=diff ============================================================================== --- servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationTest.java (original) +++ servicemix/smx4/features/trunk/cxf/cxf-transport-nmr/src/test/java/org/apache/servicemix/cxf/transport/nmr/NMRDestinationTest.java Thu May 13 07:43:39 2010 @@ -20,6 +20,7 @@ package org.apache.servicemix.cxf.transport.nmr; import java.io.ByteArrayInputStream; +import java.util.HashMap; import java.util.logging.Logger; import javax.xml.namespace.QName; @@ -67,7 +68,7 @@ public class NMRDestinationTest extends channel.send(messageExchange); EasyMock.replay(channel); - NMRDestinationOutputStream jbiOS = new NMRDestinationOutputStream(message, channel); + NMRDestinationOutputStream jbiOS = new NMRDestinationOutputStream(message, new MessageImpl(), channel); //Create array of more than what is in threshold in CachedOutputStream, //though the threshold in CachedOutputStream should be made protected @@ -120,7 +121,8 @@ public class NMRDestinationTest extends org.apache.servicemix.nmr.api.Message inMsg = control.createMock(org.apache.servicemix.nmr.api.Message.class); EasyMock.expect(xchg.getStatus()).andReturn(Status.Active); EasyMock.expect(xchg.getIn()).andReturn(inMsg); - + EasyMock.expect(inMsg.getAttachments()).andReturn(new HashMap()); + EasyMock.expect(inMsg.getHeaders()).andReturn(new HashMap()); Source source = new StreamSource(new ByteArrayInputStream( "TestHelloWorld".getBytes())); EasyMock.expect(inMsg.getBody(Source.class)).andReturn(source);