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/10/29 20:47:38 UTC

svn commit: r1536866 - in /cxf/branches/2.7.x-fixes: api/src/main/java/org/apache/cxf/io/ common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/ rt/core/src/main/java/org/apache/cxf/databinding/source/

Author: dkulp
Date: Tue Oct 29 19:47:37 2013
New Revision: 1536866

URL: http://svn.apache.org/r1536866
Log:
Merged revisions 1536860 via  git cherry-pick from
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1536860 | dkulp | 2013-10-29 15:33:19 -0400 (Tue, 29 Oct 2013) | 3 lines

  [CXF-5365] Part 1: if woodstox cannot process the schemas, fallback to slower method.
  Part 2: If element doesn't have XOP elements, still validate.

........

Modified:
    cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/io/StaxValidationManager.java
    cxf/branches/2.7.x-fixes/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/WoodstoxValidationImpl.java
    cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java

Modified: cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/io/StaxValidationManager.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/io/StaxValidationManager.java?rev=1536866&r1=1536865&r2=1536866&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/io/StaxValidationManager.java (original)
+++ cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/io/StaxValidationManager.java Tue Oct 29 19:47:37 2013
@@ -36,7 +36,7 @@ public interface StaxValidationManager {
      * @param serviceInfo - the Service to pull the schema from
      * @throws XMLStreamException 
      */
-    void setupValidation(XMLStreamReader reader, ServiceInfo serviceInfo) throws XMLStreamException;
+    boolean setupValidation(XMLStreamReader reader, ServiceInfo serviceInfo) throws XMLStreamException;
     
     /**
      * Install the schemas onto the writer for validation.
@@ -44,6 +44,6 @@ public interface StaxValidationManager {
      * @param serviceInfo - the Service to pull the schema from
      * @throws XMLStreamException 
      */
-    void setupValidation(XMLStreamWriter writer, ServiceInfo serviceInfo) throws XMLStreamException;
+    boolean setupValidation(XMLStreamWriter writer, ServiceInfo serviceInfo) throws XMLStreamException;
 
 }

Modified: cxf/branches/2.7.x-fixes/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/WoodstoxValidationImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/WoodstoxValidationImpl.java?rev=1536866&r1=1536865&r2=1536866&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/WoodstoxValidationImpl.java (original)
+++ cxf/branches/2.7.x-fixes/common/wstx-msv-validation/src/main/java/org/apache/cxf/wstx_msv_validation/WoodstoxValidationImpl.java Tue Oct 29 19:47:37 2013
@@ -61,16 +61,20 @@ public class WoodstoxValidationImpl impl
 
     /** {@inheritDoc}
      * @throws XMLStreamException */
-    public void setupValidation(XMLStreamReader reader, 
+    public boolean setupValidation(XMLStreamReader reader,
                                 ServiceInfo serviceInfo) throws XMLStreamException {
         if (utils != null && reader != null) {
             utils.setupValidation(reader, serviceInfo);
+            return true;
         }
+        return false;
     }
 
-    public void setupValidation(XMLStreamWriter writer, ServiceInfo serviceInfo) throws XMLStreamException {
+    public boolean setupValidation(XMLStreamWriter writer, ServiceInfo serviceInfo) throws XMLStreamException {
         if (utils != null && writer != null) {
             utils.setupValidation(writer, serviceInfo);
+            return true;
         }
+        return false;
     }
 }

Modified: cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java?rev=1536866&r1=1536865&r2=1536866&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java (original)
+++ cxf/branches/2.7.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java Tue Oct 29 19:47:37 2013
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collection;
 import java.util.List;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.activation.DataSource;
@@ -216,22 +217,26 @@ public class XMLStreamDataReader impleme
             rootElement = (Element)ds.getNode();
         }
         StaxValidationManager svm = message.getExchange().getBus().getExtension(StaxValidationManager.class);
+        boolean stax = false;
         if (svm != null) {
             //filter xop node
-            XMLStreamReader reader = StaxUtils.createXMLStreamReader(ds);
-            XMLStreamReader filteredReader = 
-                StaxUtils.createFilteredReader(reader, 
-                                               new StaxStreamFilter(new QName[] {XOP}));
             
             XMLStreamWriter nullWriter = StaxUtils.createXMLStreamWriter(new NUllOutputStream());
-            
-            svm.setupValidation(nullWriter, message.getExchange().getService().getServiceInfos().get(0));
-            StaxUtils.copy(filteredReader, nullWriter);
-        } else {
+            if (svm.setupValidation(nullWriter, message.getExchange().getService().getServiceInfos().get(0))) {
+                XMLStreamReader reader = StaxUtils.createXMLStreamReader(ds);
+                XMLStreamReader filteredReader =
+                StaxUtils.createFilteredReader(reader,
+                                               new StaxStreamFilter(new QName[] {XOP}));
+                StaxUtils.copy(filteredReader, nullWriter);
+                stax = true;
+            }
+        }
+        if (!stax) {
             //MSV not available, use a slower method of cloning the data, replace the xop's, validate
             LOG.fine("NO_MSV_AVAILABLE");
+            Element newElement = rootElement;
             if (DOMUtils.hasElementWithName(rootElement, "http://www.w3.org/2004/08/xop/include", "Include")) {
-                Element newElement = (Element)rootElement.cloneNode(true);
+                newElement = (Element)rootElement.cloneNode(true);
                 List<Element> elems = DOMUtils.findAllElementsByTagNameNS(newElement, 
                                                                           "http://www.w3.org/2004/08/xop/include",
                                                                           "Include");
@@ -242,11 +247,11 @@ public class XMLStreamDataReader impleme
                     //set the fake base64Binary to validate instead of reading the attachment from message
                     parentNode.setTextContent(javax.xml.bind.DatatypeConverter.printBase64Binary(cid.getBytes()));
                 }
-                try {
-                    schema.newValidator().validate(new DOMSource(newElement));
-                } catch (SAXException e) {
-                    throw new XMLStreamException(e);
-                }
+            }
+            try {
+                schema.newValidator().validate(new DOMSource(newElement));
+            } catch (SAXException e) {
+                throw new XMLStreamException(e);
             }
         }
         return rootElement;