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:33:19 UTC

svn commit: r1536860 - /cxf/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java

Author: dkulp
Date: Tue Oct 29 19:33:19 2013
New Revision: 1536860

URL: http://svn.apache.org/r1536860
Log:
[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/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java

Modified: cxf/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/cxf/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java?rev=1536860&r1=1536859&r2=1536860&view=diff
==============================================================================
--- cxf/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java (original)
+++ cxf/trunk/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java Tue Oct 29 19:33:19 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;
@@ -225,7 +226,18 @@ public class XMLStreamDataReader impleme
         }
 
         WoodstoxValidationImpl impl = new WoodstoxValidationImpl();
-        if (impl.canValidate()) {
+        XMLStreamWriter nullWriter = null;
+        boolean canValidate = impl.canValidate();
+        if (canValidate) {
+            nullWriter = StaxUtils.createXMLStreamWriter(new NUllOutputStream());
+            try {
+                impl.setupValidation(nullWriter, message.getExchange().getService().getServiceInfos().get(0));
+            } catch (Throwable t) {
+                LOG.log(Level.FINE, "Trouble setting up validation.", t);
+                canValidate = false;
+            }
+        }
+        if (canValidate) {
             //Can use the MSV libs and woodstox to handle the schema validation during 
             //parsing and processing.   Much faster and single traversal
             //filter xop node
@@ -234,15 +246,13 @@ public class XMLStreamDataReader impleme
                 StaxUtils.createFilteredReader(reader, 
                                                new StaxStreamFilter(new QName[] {XOP}));
             
-            XMLStreamWriter nullWriter = StaxUtils.createXMLStreamWriter(new NUllOutputStream());
-            
-            impl.setupValidation(nullWriter, message.getExchange().getService().getServiceInfos().get(0));
             StaxUtils.copy(filteredReader, nullWriter);
         } else {
             //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");
@@ -253,11 +263,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;