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;        


Reply via email to