You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2010/09/04 16:05:21 UTC

svn commit: r992605 - /cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java

Author: bimargulies
Date: Sat Sep  4 14:05:21 2010
New Revision: 992605

URL: http://svn.apache.org/viewvc?rev=992605&view=rev
Log:
Add some sanity checks to AbstractDataBinding.addSchemaDocument. Something is rotten, and this will help find out what.

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java?rev=992605&r1=992604&r2=992605&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractDataBinding.java Sat Sep  4 14:05:21 2010
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.Resource;
+import javax.xml.XMLConstants;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.dom.DOMSource;
@@ -69,7 +70,7 @@ public abstract class AbstractDataBindin
 
     /**
      * This call is used to set the bus. It should only be called once.
-     * 
+     *
      * @param bus
      */
     @Resource(name = "cxf")
@@ -88,6 +89,23 @@ public abstract class AbstractDataBindin
 
     public XmlSchema addSchemaDocument(ServiceInfo serviceInfo, SchemaCollection col, Document d,
                                        String systemId) {
+
+
+        /*
+         * Sanity check. The document has to remotely resemble a schema.
+         */
+        if (!XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(d.getDocumentElement().getNamespaceURI())) {
+            throw new RuntimeException("Invalid schema document passed to "
+                                       + "AbstractDataBinding.addSchemaDocument, "
+                                       + "not in W3C schema namespace");
+        }
+
+        if (!"schema".equals(d.getDocumentElement().getLocalName())) {
+            throw new RuntimeException("Invalid schema document passed to "
+                                       + "AbstractDataBinding.addSchemaDocument, "
+                                       + "document element isn't 'schema'");
+        }
+
         String ns = d.getDocumentElement().getAttribute("targetNamespace");
         boolean copied = false;
 
@@ -129,7 +147,7 @@ public abstract class AbstractDataBindin
             }
             n = n.getNextSibling();
         }
-        
+
         if (patchRequired) {
             if (!copied) {
                 d = copy(d);
@@ -168,7 +186,7 @@ public abstract class AbstractDataBindin
         boolean hasStuffToRemove = false;
         Element el = DOMUtils.getFirstElement(d.getDocumentElement());
         while (el != null) {
-            if ("import".equals(el.getLocalName()) 
+            if ("import".equals(el.getLocalName())
                 && StringUtils.isEmpty(el.getAttribute("targetNamespace"))) {
                 hasStuffToRemove = true;
                 break;
@@ -216,7 +234,7 @@ public abstract class AbstractDataBindin
     }
 
     /**
-     * @return the namespaceMap (URI to prefix). This will be null 
+     * @return the namespaceMap (URI to prefix). This will be null
      * if no particular namespace map has been set.
      */
     public Map<String, String> getNamespaceMap() {
@@ -224,9 +242,9 @@ public abstract class AbstractDataBindin
     }
 
     /**
-     * Set a map of from URI to prefix. If possible, the data binding will use these 
+     * Set a map of from URI to prefix. If possible, the data binding will use these
      * prefixes on the wire.
-     * 
+     *
      * @param namespaceMap The namespaceMap to set.
      */
     public void setNamespaceMap(Map<String, String> namespaceMap) {