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 2013/07/19 16:06:01 UTC

svn commit: r1504881 - in /cxf/trunk: api/src/main/java/org/apache/cxf/databinding/ api/src/main/java/org/apache/cxf/interceptor/ rt/core/src/main/java/org/apache/cxf/databinding/source/ rt/core/src/main/java/org/apache/cxf/databinding/stax/ rt/core/sr...

Author: dkulp
Date: Fri Jul 19 14:06:00 2013
New Revision: 1504881

URL: http://svn.apache.org/r1504881
Log:
Move closing the XMlStreamReader up to PRE_INVOKE except for the streaming Source cases

Added:
    cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractInterceptorProvidingDataBinding.java
Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/StaxInEndingInterceptor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/stax/StaxDataBinding.java
    cxf/trunk/rt/core/src/test/java/org/apache/cxf/databinding/source/XMLStreamDataReaderTest.java
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java

Added: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractInterceptorProvidingDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractInterceptorProvidingDataBinding.java?rev=1504881&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractInterceptorProvidingDataBinding.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractInterceptorProvidingDataBinding.java Fri Jul 19 14:06:00 2013
@@ -0,0 +1,64 @@
+/**
+ * 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.databinding;
+
+import java.util.List;
+
+import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.interceptor.InterceptorProvider;
+import org.apache.cxf.message.Message;
+
+/**
+ * 
+ */
+public abstract class AbstractInterceptorProvidingDataBinding 
+    extends AbstractDataBinding implements InterceptorProvider {
+    
+    protected ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> inInterceptors
+        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
+    protected ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> outInterceptors
+        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
+    protected ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> outFaultInterceptors
+        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
+    protected ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> inFaultInterceptors
+        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
+
+    public AbstractInterceptorProvidingDataBinding() {
+    }
+
+
+    public List<Interceptor<? extends Message>> getInInterceptors() {
+        return inInterceptors;
+    }
+
+    public List<Interceptor<? extends Message>> getOutInterceptors() {
+        return outInterceptors;
+    }
+
+    public List<Interceptor<? extends Message>> getInFaultInterceptors() {
+        return inFaultInterceptors;
+    }
+
+    public List<Interceptor<? extends Message>> getOutFaultInterceptors() {
+        return outFaultInterceptors;
+    }
+
+}

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/StaxInEndingInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/StaxInEndingInterceptor.java?rev=1504881&r1=1504880&r2=1504881&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/StaxInEndingInterceptor.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/StaxInEndingInterceptor.java Fri Jul 19 14:06:00 2013
@@ -35,7 +35,10 @@ public class StaxInEndingInterceptor ext
     public static final StaxInEndingInterceptor INSTANCE = new StaxInEndingInterceptor();
     
     public StaxInEndingInterceptor() {
-        super(Phase.POST_INVOKE);
+        super(Phase.PRE_INVOKE);
+    }
+    public StaxInEndingInterceptor(String phase) {
+        super(phase);
     }
 
     public void handleMessage(Message message) throws Fault {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java?rev=1504881&r1=1504880&r2=1504881&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java Fri Jul 19 14:06:00 2013
@@ -45,9 +45,11 @@ import org.apache.cxf.common.logging.Log
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxInEndingInterceptor;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.staxutils.DepthXMLStreamReader;
 import org.apache.cxf.staxutils.FragmentStreamReader;
@@ -167,11 +169,15 @@ public class XMLStreamDataReader impleme
         }
         return null;
     }
-    
     private XMLStreamReader resetForStreaming(XMLStreamReader input) throws XMLStreamException {
         //Need to mark the message as streaming this so input stream
         //is not closed and additional parts are not read and such
         if (message != null) {
+            if (message.getInterceptorChain() != null) {
+                message.getInterceptorChain().remove(StaxInEndingInterceptor.INSTANCE);
+                message.getInterceptorChain().add(new StaxInEndingInterceptor(Phase.POST_INVOKE));
+            }
+            
             message.removeContent(XMLStreamReader.class);
             final InputStream ins = message.getContent(InputStream.class);
             message.removeContent(InputStream.class);

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/stax/StaxDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/stax/StaxDataBinding.java?rev=1504881&r1=1504880&r2=1504881&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/stax/StaxDataBinding.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/databinding/stax/StaxDataBinding.java Fri Jul 19 14:06:00 2013
@@ -30,14 +30,17 @@ import javax.xml.validation.Schema;
 
 import org.w3c.dom.Node;
 
-import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
-import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractInterceptorProvidingDataBinding;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.StaxInEndingInterceptor;
 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.service.Service;
 import org.apache.cxf.service.ServiceModelVisitor;
 import org.apache.cxf.service.model.MessagePartInfo;
@@ -49,7 +52,7 @@ import org.apache.ws.commons.schema.cons
  * A simple databinding implementation which reads and writes Source objects.
  * This will not work with the standard databinding interceptors.
  */
-public class StaxDataBinding extends AbstractDataBinding {
+public class StaxDataBinding extends AbstractInterceptorProvidingDataBinding {
 
     private XMLStreamDataReader xsrReader;
     private XMLStreamDataWriter xswWriter;
@@ -58,7 +61,26 @@ public class StaxDataBinding extends Abs
         super();
         this.xsrReader = new XMLStreamDataReader();
         this.xswWriter = new XMLStreamDataWriter();
+        inInterceptors.add(new StaxInEndingInterceptor(Phase.POST_INVOKE));
+        inFaultInterceptors.add(new StaxInEndingInterceptor(Phase.POST_INVOKE));
+
+        inInterceptors.add(RemoveStaxInEndingInterceptor.INSTANCE);
+        inFaultInterceptors.add(RemoveStaxInEndingInterceptor.INSTANCE);
+    }
+    
+    static class RemoveStaxInEndingInterceptor extends AbstractPhaseInterceptor<Message> {
+        static final RemoveStaxInEndingInterceptor INSTANCE = new RemoveStaxInEndingInterceptor();
+        
+        public RemoveStaxInEndingInterceptor() {
+            super(Phase.PRE_INVOKE);
+            addBefore(StaxInEndingInterceptor.class.getName());
+        }
+
+        public void handleMessage(Message message) throws Fault {
+            message.getInterceptorChain().remove(StaxInEndingInterceptor.INSTANCE);
+        }
     }
+    
 
     public void initialize(Service service) {
         for (ServiceInfo serviceInfo : service.getServiceInfos()) {
@@ -148,7 +170,7 @@ public class StaxDataBinding extends Abs
                                                             + obj.getClass() + " are not supported.");
                 }
             } catch (XMLStreamException e) {
-                throw new Fault(new Message("COULD_NOT_READ_XML_STREAM", LOG), e);
+                throw new Fault("COULD_NOT_READ_XML_STREAM", LOG, e);
             }
         }
 

Modified: cxf/trunk/rt/core/src/test/java/org/apache/cxf/databinding/source/XMLStreamDataReaderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/test/java/org/apache/cxf/databinding/source/XMLStreamDataReaderTest.java?rev=1504881&r1=1504880&r2=1504881&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/test/java/org/apache/cxf/databinding/source/XMLStreamDataReaderTest.java (original)
+++ cxf/trunk/rt/core/src/test/java/org/apache/cxf/databinding/source/XMLStreamDataReaderTest.java Fri Jul 19 14:06:00 2013
@@ -43,6 +43,7 @@ public class XMLStreamDataReaderTest ext
     public void testCloseOriginalInputStream() throws Exception {
         XMLStreamDataReader reader = new XMLStreamDataReader();
         Message msg = new MessageImpl();
+        
         TestInputStream in1 = new TestInputStream(DUMMY_DATA);
         
         msg.setContent(InputStream.class, in1);

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=1504881&r1=1504880&r2=1504881&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 Fri Jul 19 14:06:00 2013
@@ -68,23 +68,20 @@ import org.apache.cxf.common.jaxb.JAXBCo
 import org.apache.cxf.common.jaxb.JAXBContextProxy;
 import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.PropertyUtils;
 import org.apache.cxf.common.util.ReflectionUtil;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
-import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractInterceptorProvidingDataBinding;
 import org.apache.cxf.databinding.AbstractWrapperHelper;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.databinding.WrapperCapableDatabinding;
 import org.apache.cxf.databinding.WrapperHelper;
-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.message.Message;
 import org.apache.cxf.resource.URIResolver;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.factory.ServiceConstructionException;
@@ -95,7 +92,7 @@ import org.apache.cxf.staxutils.StaxUtil
 import org.apache.cxf.ws.addressing.ObjectFactory;
 
 @NoJSR250Annotations
-public class JAXBDataBinding extends AbstractDataBinding
+public class JAXBDataBinding extends AbstractInterceptorProvidingDataBinding
     implements WrapperCapableDatabinding, InterceptorProvider {
 
     public static final String SCHEMA_RESOURCE = "SCHEMRESOURCE";
@@ -205,15 +202,6 @@ public class JAXBDataBinding extends Abs
     private boolean scanPackages = true;
     private boolean qualifiedSchemas;
 
-    private ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> in
-        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
-    private ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> out
-        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
-    private ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> outFault
-        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
-    private ModCountCopyOnWriteArrayList<Interceptor<? extends Message>> inFault
-        = new ModCountCopyOnWriteArrayList<Interceptor<? extends Message>>();
-
     public JAXBDataBinding() {
     }
 
@@ -306,8 +294,8 @@ public class JAXBDataBinding extends Abs
     @SuppressWarnings("unchecked")
     public synchronized void initialize(Service service) {
 
-        in.addIfAbsent(JAXBAttachmentSchemaValidationHack.INSTANCE);
-        inFault.addIfAbsent(JAXBAttachmentSchemaValidationHack.INSTANCE);
+        inInterceptors.addIfAbsent(JAXBAttachmentSchemaValidationHack.INSTANCE);
+        inFaultInterceptors.addIfAbsent(JAXBAttachmentSchemaValidationHack.INSTANCE);
 
         // context is already set, don't redo it
         if (context != null) {
@@ -836,19 +824,4 @@ public class JAXBDataBinding extends Abs
                                                           jaxbMethods, fields, objectFactory);
     }
 
-    public List<Interceptor<? extends Message>> getOutFaultInterceptors() {
-        return outFault;
-    }
-
-    public List<Interceptor<? extends Message>> getInFaultInterceptors() {
-        return inFault;
-    }
-
-    public List<Interceptor<? extends Message>> getInInterceptors() {
-        return in;
-    }
-
-    public List<Interceptor<? extends Message>> getOutInterceptors() {
-        return out;
-    }
 }