You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/07/28 03:07:45 UTC

svn commit: r798345 - in /cxf/trunk: api/src/main/java/org/apache/cxf/io/ rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ rt/core/src/main/java/org/apache/cxf/attachment/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/core/src/main/jav...

Author: dkulp
Date: Tue Jul 28 01:07:44 2009
New Revision: 798345

URL: http://svn.apache.org/viewvc?rev=798345&view=rev
Log:
Allow databindings to be optionally be InterceptorProviders
Hack around the JAXB attachment schema-validation issue by forcing it to
load the attachments (which validation would do anyway) and locking them
to keep them from being deleted during the extent of the reading.

Added:
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java   (with props)
Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java
    cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/InFaultChainInitiatorObserver.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutFaultChainInitiatorObserver.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java Tue Jul 28 01:07:44 2009
@@ -76,6 +76,7 @@
     private boolean tempFileFailed;
     private File tempFile;
     private File outputDir = DEFAULT_TEMP_DIR;
+    private boolean allowDeleteOfFile = true;
 
     private List<CachedOutputStreamCallback> callbacks;
     
@@ -97,6 +98,13 @@
         inmem = true;
     }
 
+    public void holdTempFile() {
+        allowDeleteOfFile = false;
+    }
+    public void releaseTempFileHold() {
+        allowDeleteOfFile = true;
+    }
+    
     public void registerCallback(CachedOutputStreamCallback cb) {
         if (null == callbacks) {
             callbacks = new ArrayList<CachedOutputStreamCallback>();
@@ -451,7 +459,7 @@
     
     private void maybeDeleteTempFile(Object stream) {
         streamList.remove(stream);
-        if (!inmem && tempFile != null && streamList.isEmpty()) {
+        if (!inmem && tempFile != null && streamList.isEmpty() && allowDeleteOfFile) {
             if (currentStream != null) {
                 try {
                     currentStream.close();

Modified: cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java (original)
+++ cxf/trunk/rt/bindings/coloc/src/main/java/org/apache/cxf/binding/coloc/ColocUtil.java Tue Jul 28 01:07:44 2009
@@ -30,6 +30,7 @@
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.interceptor.InterceptorProvider;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.phase.PhaseInterceptorChain;
@@ -83,6 +84,15 @@
             LOG.fine("Interceptors contributed by bus: " + il);
         }
         chain.add(il);
+        
+        if (ep.getService().getDataBinding() instanceof InterceptorProvider) {
+            il = ((InterceptorProvider)ep.getService().getDataBinding()).getOutInterceptors();
+            if (LOG.isLoggable(Level.FINE)) {
+                LOG.fine("Interceptors contributed by databinding: " + il);
+            }
+            chain.add(il);
+
+        }
 
         return chain;
     }
@@ -107,6 +117,14 @@
             LOG.fine("Interceptors contributed by bus: " + il);
         }
         chain.add(il);
+        
+        if (ep.getService().getDataBinding() instanceof InterceptorProvider) {
+            il = ((InterceptorProvider)ep.getService().getDataBinding()).getInInterceptors();
+            if (LOG.isLoggable(Level.FINE)) {
+                LOG.fine("Interceptors contributed by databinding: " + il);
+            }
+            chain.add(il);
+        }
         chain.setFaultObserver(new ColocOutFaultObserver(bus));
 
         return chain;

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java Tue Jul 28 01:07:44 2009
@@ -40,6 +40,13 @@
         cache.lockOutputStream();
     }
 
+    public void hold() {
+        cache.holdTempFile();
+    }
+    public void release() {
+        cache.releaseTempFileHold();
+    }
+    
     public String getContentType() {
         return ct;
     }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Tue Jul 28 01:07:44 2009
@@ -46,6 +46,7 @@
 import org.apache.cxf.interceptor.ClientOutFaultObserver;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.interceptor.InterceptorProvider;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
@@ -615,7 +616,17 @@
             LOG.fine("Interceptors contributed by binding: " + i4);
         }
 
-        PhaseInterceptorChain chain = inboundChainCache.get(pm.getInPhases(), i1, i2, i3, i4);
+        PhaseInterceptorChain chain;
+        if (endpoint.getService().getDataBinding() instanceof InterceptorProvider) {
+            InterceptorProvider p = (InterceptorProvider)endpoint.getService().getDataBinding();
+            if (LOG.isLoggable(Level.FINE)) {
+                LOG.fine("Interceptors contributed by databinging: " + p.getInInterceptors());
+            }
+            chain = inboundChainCache.get(pm.getInPhases(), i1, i2, i3, i4,
+                                          p.getInInterceptors());
+        } else {
+            chain = inboundChainCache.get(pm.getInPhases(), i1, i2, i3, i4);
+        }
         message.setInterceptorChain(chain);
 
         chain.setFaultObserver(outFaultObserver);
@@ -782,6 +793,16 @@
         if (LOG.isLoggable(Level.FINE)) {
             LOG.fine("Interceptors contributed by binding: " + i4);
         }
+        List<Interceptor> i5 = null;
+        if (endpoint.getService().getDataBinding() instanceof InterceptorProvider) {
+            i5 = ((InterceptorProvider)endpoint.getService().getDataBinding()).getOutInterceptors();
+            if (LOG.isLoggable(Level.FINE)) {
+                LOG.fine("Interceptors contributed by databinding: " + i5);
+            }
+        }
+        if (i5 != null) {
+            return outboundChainCache.get(pm.getOutPhases(), i1, i2, i3, i4, i5);
+        }
         return outboundChainCache.get(pm.getOutPhases(), i1, i2, i3, i4);
     }
 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/InFaultChainInitiatorObserver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/InFaultChainInitiatorObserver.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/InFaultChainInitiatorObserver.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/InFaultChainInitiatorObserver.java Tue Jul 28 01:07:44 2009
@@ -45,6 +45,9 @@
         chain.add(e.getService().getInFaultInterceptors());
         chain.add(e.getInFaultInterceptors());
         chain.add(e.getBinding().getInFaultInterceptors());
+        if (e.getService().getDataBinding() instanceof InterceptorProvider) {
+            chain.add(((InterceptorProvider)e.getService().getDataBinding()).getInFaultInterceptors());
+        }
     }
     
     protected SortedSet<Phase> getPhases() {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutFaultChainInitiatorObserver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutFaultChainInitiatorObserver.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutFaultChainInitiatorObserver.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutFaultChainInitiatorObserver.java Tue Jul 28 01:07:44 2009
@@ -45,6 +45,9 @@
         chain.add(e.getService().getOutFaultInterceptors());
         chain.add(e.getOutFaultInterceptors());
         chain.add(e.getBinding().getOutFaultInterceptors());
+        if (e.getService().getDataBinding() instanceof InterceptorProvider) {
+            chain.add(((InterceptorProvider)e.getService().getDataBinding()).getOutFaultInterceptors());
+        }
     }
     
     protected SortedSet<Phase> getPhases() {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainInterceptor.java Tue Jul 28 01:07:44 2009
@@ -146,14 +146,28 @@
             LOG.fine("Interceptors contributed by endpoint: " + i3);
         }
         List<Interceptor> i4 = null;
-        PhaseInterceptorChain chain;
         if (binding != null) {
             i4 = binding.getOutInterceptors();
             if (LOG.isLoggable(Level.FINE)) {
                 LOG.fine("Interceptors contributed by binding: " + i4);
             }
         }
-        if (i4 != null) {
+        List<Interceptor> i5 = null;
+        if (ep.getService().getDataBinding() instanceof InterceptorProvider) {
+            i5 = ((InterceptorProvider)ep.getService().getDataBinding()).getOutInterceptors();
+            if (LOG.isLoggable(Level.FINE)) {
+                LOG.fine("Interceptors contributed by databinding: " + i5);
+            }
+            if (i4 == null) {
+                i4 = i5;
+                i5 = null;
+            }
+        }
+        PhaseInterceptorChain chain;
+        if (i5 != null) {
+            chain = chainCache.get(bus.getExtension(PhaseManager.class).getOutPhases(),
+                                   i1, i2, i3, i4, i5);
+        } else if (i4 != null) {
             chain = chainCache.get(bus.getExtension(PhaseManager.class).getOutPhases(),
                                    i1, i2, i3, i4);
         } else {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java Tue Jul 28 01:07:44 2009
@@ -30,6 +30,7 @@
 import org.apache.cxf.binding.Binding;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.interceptor.InterceptorProvider;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
@@ -74,12 +75,26 @@
             exchange.setInMessage(message);
             setExchangeProperties(exchange, message);
     
+            InterceptorProvider dbp = null;
+            if (endpoint.getService().getDataBinding() instanceof InterceptorProvider) {
+                dbp = (InterceptorProvider)endpoint.getService().getDataBinding();
+            }
             // setup chain
-            phaseChain = chainCache.get(bus.getExtension(PhaseManager.class).getInPhases(),
-                                                         bus.getInInterceptors(),
-                                                         endpoint.getService().getInInterceptors(),
-                                                         endpoint.getInInterceptors(),
-                                                         getBinding().getInInterceptors());
+            if (dbp == null) {
+                phaseChain = chainCache.get(bus.getExtension(PhaseManager.class).getInPhases(),
+                                                             bus.getInInterceptors(),
+                                                             endpoint.getService().getInInterceptors(),
+                                                             endpoint.getInInterceptors(),
+                                                             getBinding().getInInterceptors());
+            } else {
+                phaseChain = chainCache.get(bus.getExtension(PhaseManager.class).getInPhases(),
+                                            bus.getInInterceptors(),
+                                            endpoint.getService().getInInterceptors(),
+                                            endpoint.getInInterceptors(),
+                                            getBinding().getInInterceptors(),
+                                            dbp.getInInterceptors());
+            }
+        
             
             
             message.setInterceptorChain(phaseChain);

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Jul 28 01:07:44 2009
@@ -63,6 +63,7 @@
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.CacheMap;
 import org.apache.cxf.common.util.CachedClass;
+import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
@@ -73,6 +74,9 @@
 import org.apache.cxf.databinding.WrapperCapableDatabinding;
 import org.apache.cxf.databinding.WrapperHelper;
 import org.apache.cxf.helpers.XMLUtils;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.interceptor.InterceptorProvider;
+import org.apache.cxf.jaxb.attachment.JAXBAttachmentSchemaValidationHack;
 import org.apache.cxf.jaxb.io.DataReaderImpl;
 import org.apache.cxf.jaxb.io.DataWriterImpl;
 import org.apache.cxf.resource.URIResolver;
@@ -81,7 +85,9 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.ws.addressing.ObjectFactory;
 
-public class JAXBDataBinding extends AbstractDataBinding  implements WrapperCapableDatabinding {
+public class JAXBDataBinding extends AbstractDataBinding 
+    implements WrapperCapableDatabinding, InterceptorProvider {
+    
     public static final String SCHEMA_RESOURCE = "SCHEMRESOURCE";
     public static final String MTOM_THRESHOLD = "org.apache.cxf.jaxb.mtomThreshold";
 
@@ -219,6 +225,11 @@
 
     private boolean qualifiedSchemas;
     private Service service;
+    
+    private List<Interceptor> in = new ModCountCopyOnWriteArrayList<Interceptor>();
+    private List<Interceptor> out = new ModCountCopyOnWriteArrayList<Interceptor>();
+    private List<Interceptor> outFault  = new ModCountCopyOnWriteArrayList<Interceptor>();
+    private List<Interceptor> inFault  = new ModCountCopyOnWriteArrayList<Interceptor>();
 
     public JAXBDataBinding() {
     }
@@ -296,6 +307,10 @@
     @SuppressWarnings("unchecked")
     public void initialize(Service aservice) {
         this.service = aservice;
+        
+        getInInterceptors().add(JAXBAttachmentSchemaValidationHack.INSTANCE);
+        getInFaultInterceptors().add(JAXBAttachmentSchemaValidationHack.INSTANCE);
+        
         // context is already set, don't redo it
         if (context != null) {
             return;
@@ -880,5 +895,22 @@
         }
         return null;
     }   
+    
+    public List<Interceptor> getOutFaultInterceptors() {
+        return outFault;
+    }
+
+    public List<Interceptor> getInFaultInterceptors() {
+        return inFault;
+    }
+
+    public List<Interceptor> getInInterceptors() {
+        return in;
+    }
+
+    public List<Interceptor> getOutInterceptors() {
+        return out;
+    }
+
 
 }

Added: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java?rev=798345&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java (added)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java Tue Jul 28 01:07:44 2009
@@ -0,0 +1,80 @@
+/**
+ * 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.cxf.jaxb.attachment;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.cxf.attachment.AttachmentDataSource;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+/**
+ * 
+ */
+public final class JAXBAttachmentSchemaValidationHack extends AbstractPhaseInterceptor<Message> {
+    public static final Interceptor INSTANCE = new JAXBAttachmentSchemaValidationHack();
+    private static final String SAVED_DATASOURCES 
+        = JAXBAttachmentSchemaValidationHack.class.getName() + ".SAVED_DATASOURCES";
+
+    private JAXBAttachmentSchemaValidationHack() {
+        super(Phase.POST_PROTOCOL);
+    }
+    
+    public void handleMessage(Message message) throws Fault {
+        Object en = message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
+        if ((Boolean.TRUE.equals(en) || "true".equals(en)) && message.getAttachments() != null) {
+            Collection<AttachmentDataSource> dss = new ArrayList<AttachmentDataSource>();
+            for (Attachment at : message.getAttachments()) {
+                if (at.getDataHandler().getDataSource() instanceof AttachmentDataSource) {
+                    AttachmentDataSource ds = (AttachmentDataSource)at.getDataHandler().getDataSource();
+                    ds.hold();
+                    dss.add(ds);
+                }
+            }
+            if (!dss.isEmpty()) {
+                message.put(SAVED_DATASOURCES, dss);
+                message.getInterceptorChain().add(EndingInterceptor.INSTANCE);
+            }
+        }
+    }
+    
+    static class EndingInterceptor extends AbstractPhaseInterceptor<Message> {
+        static final EndingInterceptor INSTANCE = new EndingInterceptor();
+        
+        EndingInterceptor() {
+            super(Phase.PRE_LOGICAL);
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            Collection<AttachmentDataSource> dss = CastUtils.cast((List<?>)message.get(SAVED_DATASOURCES));
+            for (AttachmentDataSource ds : dss) {
+                ds.release();
+            }
+        }
+    }
+
+}

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentSchemaValidationHack.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Tue Jul 28 01:07:44 2009
@@ -510,6 +510,7 @@
         List<Interceptor> i1 = cfg.getBus().getInInterceptors();
         List<Interceptor> i2 = cfg.getInInterceptors();
         List<Interceptor> i3 = cfg.getConduitSelector().getEndpoint().getInInterceptors();
+        
         return new PhaseChainCache().get(pm.getInPhases(), i1, i2, i3);
     }
     

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java?rev=798345&r1=798344&r2=798345&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java Tue Jul 28 01:07:44 2009
@@ -30,6 +30,7 @@
 import javax.xml.ws.Holder;
 import javax.xml.ws.soap.SOAPBinding;
 
+import org.apache.axiom.attachments.utils.IOUtils;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.endpoint.Client;
@@ -59,7 +60,7 @@
     @BeforeClass
     public static void startServers() throws Exception {
         TestUtilities.setKeepAliveSystemProperty(false);
-        assertTrue("server did not launch correctly", launchServer(Server.class, true));
+        assertTrue("server did not launch correctly", launchServer(Server.class));
     }
 
     @AfterClass
@@ -67,22 +68,6 @@
         TestUtilities.recoverKeepAliveSystemProperty();
     }
 
-    /*
-     * @Test @Ignore public void testMtomSWA() throws Exception { TestMtom
-     * mtomPort = createPort(MTOM_SERVICE, MTOM_PORT, TestMtom.class); try {
-     * InputStream pre =
-     * this.getClass().getResourceAsStream("/wsdl/mtom_xop.wsdl"); long fileSize =
-     * 0; for (int i = pre.read(); i != -1; i = pre.read()) { fileSize++; }
-     * ByteArrayDataSource bads = new
-     * ByteArrayDataSource(this.getClass().getResourceAsStream(
-     * "/wsdl/mtom_xop.wsdl"), "application/octet-stream"); DataHandler dh = new
-     * DataHandler(bads); DataHandler dhResp = mtomPort.testSWA(dh); DataSource
-     * ds = dhResp.getDataSource(); InputStream in = ds.getInputStream(); long
-     * count = 0; for (int i = in.read(); i != -1; i = in.read()) { count++; }
-     * assertEquals("attachemnt length different", fileSize, count); } catch
-     * (UndeclaredThrowableException ex) { throw (Exception) ex.getCause(); } }
-     */
-
     @Test
     public void testMtomXop() throws Exception {
         TestMtom mtomPort = createPort(MTOM_SERVICE, MTOM_PORT, TestMtom.class, true, true);
@@ -110,8 +95,23 @@
             mtomPort.testXop(name, param);
             assertEquals("name unchanged", "return detail + call detail", name.value);
             assertNotNull(param.value);
-            param.value.getInputStream().close();
             
+            InputStream in = param.value.getInputStream();
+            byte bytes[] = IOUtils.getStreamAsByteArray(in);
+            assertEquals(data.length, bytes.length);
+            in.close();
+
+            param.value = new DataHandler(new ByteArrayDataSource(data, "application/octet-stream"));
+            name = new Holder<String>("call detail");
+            mtomPort.testXop(name, param);
+            assertEquals("name unchanged", "return detail + call detail", name.value);
+            assertNotNull(param.value);
+            
+            in = param.value.getInputStream();
+            bytes = IOUtils.getStreamAsByteArray(in);
+            assertEquals(data.length, bytes.length);
+            in.close();
+
         } catch (UndeclaredThrowableException ex) {
             throw (Exception)ex.getCause();
         }