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