Author: dandiep
Date: Sun May 27 22:55:03 2007
New Revision: 542121

URL: http://svn.apache.org/viewvc?view=rev&rev=542121
Log:
Don't remove headers or attachments from the out objects, instead just ensure 
that the BareOutInterceptor only uses the objects that it needs.

Fix AbstractMessageContainer.getMessagePartIndex to actually return the index 
of the message part inside of the message, and not the method index.

Modified:
    
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractMessageContainer.java
    
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
    
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
    
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
    
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/SwAOutInterceptor.java

Modified: 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractMessageContainer.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractMessageContainer.java?view=diff&rev=542121&r1=542120&r2=542121
==============================================================================
--- 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractMessageContainer.java
 (original)
+++ 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/AbstractMessageContainer.java
 Sun May 27 22:55:03 2007
@@ -92,10 +92,12 @@
     }
 
     public int getMessagePartIndex(MessagePartInfo part) {
+        int i = 0;
         for (MessagePartInfo p : messageParts.values()) {
             if (part == p) {
-                return p.getIndex();
+                return i;
             }
+            i++;
         }
         return -1;
     }

Modified: 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java?view=diff&rev=542121&r1=542120&r2=542121
==============================================================================
--- 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
 (original)
+++ 
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/MessagePartInfo.java
 Sun May 27 22:55:03 2007
@@ -24,7 +24,7 @@
 import org.apache.ws.commons.schema.XmlSchemaAnnotated;
 
 public final class MessagePartInfo extends AbstractPropertiesHolder {
-    
+
     private QName pname;
     private AbstractMessageContainer mInfo;
     

Modified: 
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?view=diff&rev=542121&r1=542120&r2=542121
==============================================================================
--- 
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
 (original)
+++ 
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
 Sun May 27 22:55:03 2007
@@ -20,7 +20,6 @@
 package org.apache.cxf.binding.soap.interceptor;
 
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.ResourceBundle;
 
@@ -40,6 +39,7 @@
 import org.apache.cxf.headers.Header;
 import org.apache.cxf.headers.HeaderManager;
 import org.apache.cxf.headers.HeaderProcessor;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
@@ -141,7 +141,7 @@
         
         List<MessagePartInfo> parts = 
wrappedBmi.getMessageInfo().getMessageParts();
         if (parts.size() > 0) {
-            List<?> objs = message.getContent(List.class);
+            List<Object> objs = 
CastUtils.cast((List<?>)message.getContent(List.class));
             if (objs == null) {
                 return endedHeader;
             }
@@ -149,17 +149,13 @@
             List<SoapHeaderInfo> headers = 
bmi.getExtensors(SoapHeaderInfo.class);
             if (headers == null) {
                 return endedHeader;
-            }
-            
-                        
+            }            
             
-            List<Object> objsToRemove = new ArrayList<Object>(headers.size());
             for (SoapHeaderInfo header : headers) {
                 MessagePartInfo part = header.getPart();
 
                 int idx = parts.indexOf(part);
-                //int idx = part.getIndex();
-                                
+                
                 Object arg = objs.get(idx);
                 if (!(startedHeader || preexistingHeaders)) {
                     try {
@@ -174,13 +170,7 @@
                 }
                 DataWriter<XMLStreamWriter> dataWriter = 
getDataWriter(message);
                 dataWriter.write(arg, header.getPart(), xtw);
-                
-                objsToRemove.add(arg);
-            }
-            for (Object obj : objsToRemove) {
-                objs.remove(obj);
             }
-            
             
             if (startedHeader || preexistingHeaders) {
                 try {

Modified: 
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java?view=diff&rev=542121&r1=542120&r2=542121
==============================================================================
--- 
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
 (original)
+++ 
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
 Sun May 27 22:55:03 2007
@@ -26,6 +26,7 @@
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 
@@ -48,31 +49,33 @@
         DataWriter<XMLStreamWriter> dataWriter = getDataWriter(message, 
XMLStreamWriter.class);
         XMLStreamWriter xmlWriter = message.getContent(XMLStreamWriter.class);
         
-        int countParts = 0;
         List<MessagePartInfo> parts = null;
+        BindingMessageInfo bmsg = null;
+        boolean client = isRequestor(message);
 
-        if (!isRequestor(message)) {
+        if (!client) {
             if (operation.getOutput() != null) {
-                parts = operation.getOutput().getMessageParts();
+                bmsg = operation.getOutput();
+                parts = bmsg.getMessageParts();
             } else {
                 // partial response to oneway
                 return;
             }
         } else {
-            parts = operation.getInput().getMessageParts();
+            bmsg = operation.getInput();
+            parts = bmsg.getMessageParts();
         }
-        countParts = parts.size();
-
-        if (countParts > 0) {
-            List<?> objs = message.getContent(List.class);
-            if (objs != null) {
-                Object[] args = objs.toArray();
-                Object[] els = parts.toArray();
-
-                for (int idx = 0; idx < countParts; idx++) {
-                    dataWriter.write(args[idx], (MessagePartInfo)els[idx], 
xmlWriter);
-                }
-            }
+        
+        List<?> objs = message.getContent(List.class);
+        if (objs == null) {
+            return;
+        }
+        
+        for (MessagePartInfo part : parts) {
+            int idx = part.getMessageInfo().getMessagePartIndex(part);
+            
+            Object o = objs.get(idx);
+            dataWriter.write(o, part, xmlWriter);
         }
     }
     

Modified: 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/SwAOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/SwAOutInterceptor.java?view=diff&rev=542121&r1=542120&r2=542121
==============================================================================
--- 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/SwAOutInterceptor.java
 (original)
+++ 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/SwAOutInterceptor.java
 Sun May 27 22:55:03 2007
@@ -112,7 +112,6 @@
 
         List<Object> outObjects = 
CastUtils.cast(message.getContent(List.class));
         
-        int removed = 0;
         for (MessagePartInfo mpi : sbi.getAttachments()) {
             String partName = mpi.getConcreteName().getLocalPart();
             String ct = (String) mpi.getProperty(Message.CONTENT_TYPE);
@@ -123,12 +122,13 @@
                 .append("@apache.org").toString();
             
             // this assumes things are in order...
-            Object o = outObjects.remove(mpi.getIndex() - removed);
+            int idx = mpi.getMessageInfo().getMessagePartIndex(mpi);
+            Object o = outObjects.get(idx);
+            
             if (o == null) {
                 continue;
             }
             
-            removed++;
             DataHandler dh = null;
             
             // This code could probably be refactored out somewhere...


Reply via email to