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
+}