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 2009/03/21 14:53:33 UTC

svn commit: r756937 - in /cxf/trunk/common/xerces-xsd-validation: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/cxf/ src/main/java/org/apache/cxf/xsdvalidation/ src/test/ src/test/java/ src/test/...

Author: bimargulies
Date: Sat Mar 21 13:53:32 2009
New Revision: 756937

URL: http://svn.apache.org/viewvc?rev=756937&view=rev
Log:
Commit first piece of Xml Schema validator so that Eclipse will be less confused.

Added:
    cxf/trunk/common/xerces-xsd-validation/
    cxf/trunk/common/xerces-xsd-validation/pom.xml   (with props)
    cxf/trunk/common/xerces-xsd-validation/src/
    cxf/trunk/common/xerces-xsd-validation/src/main/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java   (with props)
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java   (with props)
    cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java   (with props)
    cxf/trunk/common/xerces-xsd-validation/src/test/
    cxf/trunk/common/xerces-xsd-validation/src/test/java/
    cxf/trunk/common/xerces-xsd-validation/src/test/resources/

Added: cxf/trunk/common/xerces-xsd-validation/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/pom.xml?rev=756937&view=auto
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/pom.xml (added)
+++ cxf/trunk/common/xerces-xsd-validation/pom.xml Sat Mar 21 13:53:32 2009
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.cxf</groupId>
+  <artifactId>cxf-xerces-xsd-validation</artifactId>
+  <packaging>jar</packaging>
+  <version>2.2.1-SNAPSHOT</version>
+  <name>Apache CXF XML Schema Validation with Xerces</name>
+  <url>http://cxf.apache.org</url>
+  <parent>
+    <groupId>org.apache.cxf</groupId>
+    <artifactId>cxf-parent</artifactId>
+    <version>2.2.1-SNAPSHOT</version>
+    <relativePath>../../parent/pom.xml</relativePath>
+  </parent>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-common-utilities</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-annotation_1.0_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ws.commons.schema</groupId>
+      <artifactId>XmlSchema</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>xerces</groupId>
+      <artifactId>xercesImpl</artifactId>
+    </dependency>
+  </dependencies>
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/cxf/trunk/common/xerces-xsd-validation</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/cxf/trunk/common/xerces-xsd-validation</developerConnection>
+  </scm>
+</project>

Propchange: cxf/trunk/common/xerces-xsd-validation/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/common/xerces-xsd-validation/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/common/xerces-xsd-validation/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java?rev=756937&view=auto
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java (added)
+++ cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java Sat Mar 21 13:53:32 2009
@@ -0,0 +1,131 @@
+/**
+ * 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.xsdvalidation;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.util.logging.Logger;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.ls.LSInput;
+
+import org.apache.cxf.common.logging.LogUtils;
+
+/**
+ * 
+ */
+class DOMLSInput implements LSInput {
+    private static final Logger LOG = LogUtils.getL7dLogger(DOMLSInput.class);
+    private String systemId;
+    private String data;
+    
+    DOMLSInput(Document doc, String systemId) throws TransformerException {
+        this.systemId = systemId;
+        TransformerFactory factory = TransformerFactory.newInstance();
+        Transformer transformer = factory.newTransformer();
+        DOMSource source = new DOMSource(doc);
+        source.setSystemId(systemId);
+        StringWriter writer = new StringWriter();
+        StreamResult result = new StreamResult(writer);
+        transformer.transform(source, result);
+        data = writer.toString();
+        LOG.fine(systemId + ": " + data);
+        
+    }
+
+    /** {@inheritDoc}*/
+    public String getBaseURI() {
+        return null;
+    }
+
+    /** {@inheritDoc}*/
+    public InputStream getByteStream() {
+        return null;
+    }
+
+    /** {@inheritDoc}*/
+    public boolean getCertifiedText() {
+        return false;
+    }
+
+    /** {@inheritDoc}*/
+    public Reader getCharacterStream() {
+        return null;
+    }
+
+    /** {@inheritDoc}*/
+    public String getEncoding() {
+        return "utf-8";
+    }
+
+    /** {@inheritDoc}*/
+    public String getPublicId() {
+        return null;
+    }
+
+    /** {@inheritDoc}*/
+    public String getStringData() {
+        return data;
+    }
+
+    /** {@inheritDoc}*/
+    public String getSystemId() {
+        return systemId;
+    }
+
+    /** {@inheritDoc}*/
+    public void setBaseURI(String baseURI) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setByteStream(InputStream byteStream) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setCertifiedText(boolean certifiedText) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setCharacterStream(Reader characterStream) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setEncoding(String encoding) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setPublicId(String publicId) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setStringData(String stringData) {
+    }
+
+    /** {@inheritDoc}*/
+    public void setSystemId(String systemId) {
+    }
+}

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/DOMLSInput.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java?rev=756937&view=auto
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java (added)
+++ cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java Sat Mar 21 13:53:32 2009
@@ -0,0 +1,101 @@
+/**
+ * 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.xsdvalidation;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.XMLConstants;
+import javax.xml.transform.TransformerException;
+
+import org.w3c.dom.DOMErrorHandler;
+import org.w3c.dom.Document;
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSResourceResolver;
+
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaSerializer;
+import org.apache.ws.commons.schema.XmlSchemaSerializer.XmlSchemaSerializerException;
+import org.apache.xerces.dom.DOMXSImplementationSourceImpl;
+import org.apache.xerces.xs.LSInputList;
+import org.apache.xerces.xs.XSImplementation;
+import org.apache.xerces.xs.XSLoader;
+
+/**
+ * 
+ */
+class XercesSchemaValidationUtils {
+
+    private static final class ListLSInput implements LSInputList {
+        private final List<DOMLSInput> inputs;
+
+        private ListLSInput(List<DOMLSInput> inputs) {
+            this.inputs = inputs;
+        }
+
+        public int getLength() {
+            return inputs.size();
+        }
+
+        public LSInput item(int index) {
+            return inputs.get(index);
+        }
+    }
+
+    private XSImplementation impl;
+
+    XercesSchemaValidationUtils() {
+        DOMXSImplementationSourceImpl source = new org.apache.xerces.dom.DOMXSImplementationSourceImpl();
+        impl = (XSImplementation)source.getDOMImplementation("XS-Loader");
+    }
+
+    void tryToParseSchemas(XmlSchemaCollection collection, DOMErrorHandler handler)
+        throws XmlSchemaSerializerException, TransformerException {
+
+        final List<DOMLSInput> inputs = new ArrayList<DOMLSInput>();
+        final Map<String, LSInput> resolverMap = new HashMap<String, LSInput>();
+
+        for (XmlSchema schema : collection.getXmlSchemas()) {
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(schema.getTargetNamespace())) {
+                continue;
+            }
+            Document document = new XmlSchemaSerializer().serializeSchema(schema, false)[0];
+            DOMLSInput input = new DOMLSInput(document, schema.getTargetNamespace());
+            resolverMap.put(schema.getTargetNamespace(), input);
+            inputs.add(input);
+        }
+
+        XSLoader schemaLoader = impl.createXSLoader(null);
+        schemaLoader.getConfig().setParameter("validate", Boolean.TRUE);
+        schemaLoader.getConfig().setParameter("error-handler", handler);
+        schemaLoader.getConfig().setParameter("resource-resolver", new LSResourceResolver() {
+
+            public LSInput resolveResource(String type, String namespaceURI, String publicId,
+                                           String systemId, String baseURI) {
+                return resolverMap.get(namespaceURI);
+            }
+        });
+
+        schemaLoader.loadInputList(new ListLSInput(inputs));
+    }
+}

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesSchemaValidationUtils.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java?rev=756937&view=auto
==============================================================================
--- cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java (added)
+++ cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java Sat Mar 21 13:53:32 2009
@@ -0,0 +1,76 @@
+/**
+ * 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.xsdvalidation;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.xml.transform.TransformerException;
+
+import org.w3c.dom.DOMErrorHandler;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.xmlschema.XmlSchemaValidationManager;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaSerializer.XmlSchemaSerializerException;
+
+/**
+ * 
+ */
+public class XercesXsdValidationImpl implements XmlSchemaValidationManager {
+    private static final Logger LOG = LogUtils.getL7dLogger(XercesXsdValidationImpl.class);
+
+    private Bus bus;
+    private XercesSchemaValidationUtils utils;
+
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+
+    @PostConstruct
+    public void register() {
+
+        try {
+            utils = new XercesSchemaValidationUtils();
+        } catch (Exception e) {
+            /* If the dependencies are missing ... */
+            return;
+        }
+
+        if (null != bus) {
+            bus.setExtension(this, XmlSchemaValidationManager.class);
+        }
+    }
+
+    /** {@inheritDoc} */
+    public void validateSchemas(XmlSchemaCollection schemas, DOMErrorHandler errorHandler) {
+        try {
+            utils.tryToParseSchemas(schemas, errorHandler);
+        } catch (XmlSchemaSerializerException e) {
+            LOG.log(Level.WARNING, "XML Schema serialization error", e);
+        } catch (TransformerException e) {
+            LOG.log(Level.SEVERE, "TraX failure converting DOM to string", e);
+        }
+    }
+}

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/common/xerces-xsd-validation/src/main/java/org/apache/cxf/xsdvalidation/XercesXsdValidationImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date