You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bu...@apache.org on 2019/04/23 08:36:47 UTC

[cxf] branch master updated: cxf-tools-wadlto-jaxrs: load all schemas for validation (#546)

This is an automated email from the ASF dual-hosted git repository.

buhhunyx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new ee0b088  cxf-tools-wadlto-jaxrs: load all schemas for validation (#546)
ee0b088 is described below

commit ee0b088d772f89f0135f6584f9be53a1255450fc
Author: Alexey Markevich <bu...@gmail.com>
AuthorDate: Tue Apr 23 11:36:41 2019 +0300

    cxf-tools-wadlto-jaxrs: load all schemas for validation (#546)
    
    * cxf-tools-wadlto-jaxrs: load all schemas for validation
    
    * minor ValidationResult update
---
 .../cxf/jaxrs/utils/schemas/SchemaHandler.java     | 14 +++------
 .../tools/validator/internal/ValidationResult.java |  2 +-
 .../cxf/tools/wadlto/jaxrs/SourceGenerator.java    | 34 +++++++++-------------
 .../cxf/tools/wadlto/jaxrs/ValidateWadlTest.java   | 26 +++++------------
 4 files changed, 26 insertions(+), 50 deletions(-)

diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java
index de3c729..a8f4bf1 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java
@@ -27,7 +27,7 @@ import java.io.Reader;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.Collections;
 import java.util.List;
 
 import javax.xml.transform.Source;
@@ -83,19 +83,15 @@ public class SchemaHandler {
     public static Schema createSchema(List<String> locations, String catalogLocation, final Bus bus) {
 
         SchemaFactory factory = SchemaFactory.newInstance(Constants.URI_2001_SCHEMA_XSD);
-        Schema s = null;
         try {
             List<Source> sources = new ArrayList<>();
             for (String loc : locations) {
-                List<URL> schemaURLs = new LinkedList<>();
-
+                final List<URL> schemaURLs;
                 if (loc.lastIndexOf('.') == -1 || loc.lastIndexOf('*') != -1) {
                     schemaURLs = ClasspathScanner.findResources(loc, "xsd");
                 } else {
                     URL url = ResourceUtils.getResourceURL(loc, bus);
-                    if (url != null) {
-                        schemaURLs.add(url);
-                    }
+                    schemaURLs = url != null ? Collections.singletonList(url) : Collections.emptyList();
                 }
                 if (schemaURLs.isEmpty()) {
                     throw new IllegalArgumentException("Cannot find XML schema location: " + loc);
@@ -152,12 +148,10 @@ public class SchemaHandler {
                     }
                 }
             }
-            s = factory.newSchema(sources.toArray(new Source[0]));
+            return factory.newSchema(sources.toArray(new Source[0]));
         } catch (Exception ex) {
             throw new IllegalArgumentException("Failed to load XML schema : " + ex.getMessage(), ex);
         }
-        return s;
-
     }
 
 }
diff --git a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidationResult.java b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidationResult.java
index b444dd2..d457ffc 100644
--- a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidationResult.java
+++ b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidationResult.java
@@ -57,7 +57,7 @@ public final class ValidationResult {
     }
 
     public boolean isSuccessful() {
-        return errors.isEmpty() && warnings.size() == 0;
+        return errors.isEmpty() && warnings.isEmpty();
     }
 
     public String toString() {
diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
index 0595afa..991c56c 100644
--- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
+++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
@@ -18,7 +18,6 @@
  */
 package org.apache.cxf.tools.wadlto.jaxrs;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -70,9 +69,7 @@ import javax.ws.rs.core.Response;
 import javax.xml.namespace.QName;
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
 import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
 import javax.xml.validation.Validator;
 
 import org.w3c.dom.Element;
@@ -106,6 +103,7 @@ import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
 import org.apache.cxf.jaxrs.model.wadl.WadlGenerator;
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.ws.commons.schema.XmlSchema;
@@ -1796,27 +1794,21 @@ public class SourceGenerator {
 
     private Application readWadl(String wadl, String docPath) {
         Element wadlElement = readXmlDocument(new StringReader(wadl));
-        try {
-            if (validateWadl) {
-                SchemaFactory factory = SchemaFactory.newInstance(Constants.URI_2001_SCHEMA_XSD);
-                URL schemaURL = ResourceUtils.getResourceURL("classpath:/schemas/wadl/wadl.xsd", bus);
-                Reader r = new BufferedReader(new InputStreamReader(schemaURL.openStream(), StandardCharsets.UTF_8));
-                StreamSource source = new StreamSource(r);
-                source.setSystemId(schemaURL.toString());
-                Schema s = factory.newSchema(new Source[]{source});
-                DOMSource wadlDoc = new DOMSource(wadlElement);
+        if (validateWadl) {
+            final WadlValidationErrorHandler errorHandler = new WadlValidationErrorHandler();
+            try {
+                Schema s = SchemaHandler.createSchema(
+                        Arrays.asList("classpath:/schemas/wsdl/xml.xsd", "classpath:/schemas/wadl/wadl.xsd"), null,
+                        bus);
                 Validator v = s.newValidator();
-                WadlValidationErrorHandler errorHandler = new WadlValidationErrorHandler();
                 v.setErrorHandler(errorHandler);
-                v.validate(wadlDoc);
-                if (errorHandler.isValidationFailed()) {
-                    throw new ValidationException("WADL document is not valid.");
-                }
+                v.validate(new DOMSource(wadlElement));
+            } catch (Exception ex) {
+                throw new ValidationException("WADL document can not be validated", ex);
+            }
+            if (errorHandler.isValidationFailed()) {
+                throw new ValidationException("WADL document is not valid.");
             }
-        } catch (ValidationException ex) {
-            throw ex;
-        } catch (Exception ex) {
-            throw new ValidationException("WADL document can not be validated", ex);
         }
         return new Application(wadlElement, docPath);
     }
diff --git a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/ValidateWadlTest.java b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/ValidateWadlTest.java
index 63dbcc1..0fdb201 100644
--- a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/ValidateWadlTest.java
+++ b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/ValidateWadlTest.java
@@ -19,8 +19,6 @@
 
 package org.apache.cxf.tools.wadlto.jaxrs;
 
-import java.net.URISyntaxException;
-
 import org.apache.cxf.tools.common.ProcessorTestBase;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.wadlto.WadlToolConstants;
@@ -32,20 +30,15 @@ import static org.junit.Assert.fail;
 
 public class ValidateWadlTest extends ProcessorTestBase {
 
-    @Test
+    @Test(expected = ValidationException.class)
     public void testInvalidWadl() throws Exception {
-        try {
-            JAXRSContainer container = new JAXRSContainer(null);
+        JAXRSContainer container = new JAXRSContainer(null);
 
-            ToolContext context = new ToolContext();
-            context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/invalidWadl.xml"));
-            context.put(WadlToolConstants.CFG_VALIDATE_WADL, "true");
-            container.setContext(context);
-            container.execute();
-            fail("Validation exception expected");
-        } catch (ValidationException e) {
-            // expected
-        }
+        ToolContext context = new ToolContext();
+        context.put(WadlToolConstants.CFG_WADLURL, getLocation("/wadl/invalidWadl.xml"));
+        context.put(WadlToolConstants.CFG_VALIDATE_WADL, "true");
+        container.setContext(context);
+        container.execute();
     }
 
     @Test
@@ -64,7 +57,4 @@ public class ValidateWadlTest extends ProcessorTestBase {
         }
     }
 
-    protected String getLocation(String wsdlFile) throws URISyntaxException {
-        return getClass().getResource(wsdlFile).toString();
-    }
-}
\ No newline at end of file
+}