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 bcde271 cxf-tools-common: in-memory schema generation
bcde271 is described below
commit bcde2712f577c400c03d6acf8c33877510505e0e
Author: Alexey Markevich <[email protected]>
AuthorDate: Tue Mar 2 23:01:48 2021 +0300
cxf-tools-common: in-memory schema generation
---
.../java/org/apache/cxf/tools/util/JAXBUtils.java | 128 ++++-----------------
.../cxf/tools/wadlto/jaxb/CustomizationParser.java | 3 +-
.../wsdlto/databinding/jaxb/JAXBDataBinding.java | 9 +-
3 files changed, 25 insertions(+), 115 deletions(-)
diff --git
a/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
b/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
index 11b6253..f40a008 100644
--- a/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
+++ b/tools/common/src/main/java/org/apache/cxf/tools/util/JAXBUtils.java
@@ -19,123 +19,39 @@
package org.apache.cxf.tools.util;
-import java.io.File;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.util.List;
+import java.io.StringReader;
-import javax.xml.XMLConstants;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import org.apache.cxf.helpers.DOMUtils;
-import org.apache.cxf.helpers.FileUtils;
-import org.apache.cxf.staxutils.StaxUtils;
-import org.apache.cxf.tools.common.ToolConstants;
+import org.xml.sax.InputSource;
public final class JAXBUtils {
- private JAXBUtils() {
- }
- private static Node innerJaxbBinding(Element schema) {
- String schemaNamespace = schema.getNamespaceURI();
- List<Element> annoList = DOMUtils.findAllElementsByTagNameNS(schema,
schemaNamespace, "annotation");
- Element annotation = null;
- if (!annoList.isEmpty()) {
- annotation = annoList.get(0);
- } else {
- annotation =
schema.getOwnerDocument().createElementNS(schemaNamespace, "annotation");
- }
- List<Element> appList = DOMUtils.findAllElementsByTagNameNS(annotation,
-
schemaNamespace,
- "appinfo");
- Element appInfo = null;
- if (!appList.isEmpty()) {
- appInfo = appList.get(0);
- } else {
- appInfo =
schema.getOwnerDocument().createElementNS(schemaNamespace, "appinfo");
- annotation.appendChild(appInfo);
- }
-
- Element jaxbBindings = null;
- List<Element> jaxbList = DOMUtils.findAllElementsByTagNameNS(schema,
-
ToolConstants.NS_JAXB_BINDINGS,
-
"schemaBindings");
- if (!jaxbList.isEmpty()) {
- jaxbBindings = jaxbList.get(0);
- } else {
- jaxbBindings =
schema.getOwnerDocument().createElementNS(ToolConstants.NS_JAXB_BINDINGS,
-
"schemaBindings");
- appInfo.appendChild(jaxbBindings);
- }
- return jaxbBindings;
-
- }
+ private static final String SCHEMA =
+ "<schema xmlns=\"http://www.w3.org/2001/XMLSchema\""
+ + " xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"
jaxb:version=\"2.0\""
+ + " targetNamespace=\"${targetNamespace}\">"
+ + " <annotation>"
+ + " <appinfo>"
+ + " <jaxb:schemaBindings>"
+ + " <jaxb:package name=\"${package}\" />"
+ + " </jaxb:schemaBindings>"
+ + " </appinfo>"
+ + " </annotation>"
+ + "</schema>";
- public static Node innerJaxbPackageBinding(Element schema, String
packagevalue) {
- Document doc = schema.getOwnerDocument();
-
- if (!DOMUtils.hasAttribute(schema, ToolConstants.NS_JAXB_BINDINGS)) {
- Attr attr =
-
schema.getOwnerDocument().createAttributeNS(ToolConstants.NS_JAXB_BINDINGS,
- "version");
- attr.setValue("2.0");
- schema.setAttributeNodeNS(attr);
- }
-
- Node schemaBindings = innerJaxbBinding(schema);
-
- List<Element> pkgList = DOMUtils.findAllElementsByTagNameNS(schema,
-
ToolConstants.NS_JAXB_BINDINGS,
- "package");
- Element packagename = null;
- if (!pkgList.isEmpty()) {
- packagename = pkgList.get(0);
- } else {
- packagename = doc.createElementNS(ToolConstants.NS_JAXB_BINDINGS,
"package");
- }
- packagename.setAttributeNS(null, "name", packagevalue);
-
- schemaBindings.appendChild(packagename);
-
- return schemaBindings.getParentNode().getParentNode();
+ private JAXBUtils() {
}
/**
- * Create the jaxb binding file to customize namespace to package mapping
+ * Create the jaxb binding to customize namespace to package mapping
*
* @param namespace
* @param pkgName
- * @return file
+ * @return InputSource
*/
- public static File getPackageMappingSchemaBindingFile(String namespace,
String pkgName) {
- Document doc = DOMUtils.getEmptyDocument();
- Element rootElement = doc.createElementNS(ToolConstants.SCHEMA_URI,
"schema");
- rootElement.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI,
"xmlns", ToolConstants.SCHEMA_URI);
- rootElement.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI,
"xmlns:jaxb", ToolConstants.NS_JAXB_BINDINGS);
- rootElement.setAttributeNS(ToolConstants.NS_JAXB_BINDINGS,
"jaxb:version", "2.0");
- rootElement.setAttributeNS(null, "targetNamespace", namespace);
- Element annoElement = doc.createElementNS(ToolConstants.SCHEMA_URI,
"annotation");
- Element appInfo = doc.createElementNS(ToolConstants.SCHEMA_URI,
"appinfo");
- Element schemaBindings =
doc.createElementNS(ToolConstants.NS_JAXB_BINDINGS, "jaxb:schemaBindings");
- Element pkgElement =
doc.createElementNS(ToolConstants.NS_JAXB_BINDINGS, "jaxb:package");
- pkgElement.setAttributeNS(null, "name", pkgName);
- annoElement.appendChild(appInfo);
- appInfo.appendChild(schemaBindings);
- schemaBindings.appendChild(pkgElement);
- rootElement.appendChild(annoElement);
- File tmpFile = null;
- try {
- tmpFile = FileUtils.createTempFile("customzied", ".xsd");
- try (OutputStream out = Files.newOutputStream(tmpFile.toPath())) {
- StaxUtils.writeTo(rootElement, out);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return tmpFile;
+ public static InputSource getPackageMappingSchemaBinding(String namespace,
String pkgName) {
+ final InputSource is = new InputSource(
+ new StringReader(SCHEMA.replace("${targetNamespace}",
namespace).replace("${package}", pkgName)));
+ is.setSystemId(namespace);
+ return is;
}
}
diff --git
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxb/CustomizationParser.java
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxb/CustomizationParser.java
index 37e766e..de7c3ea 100644
---
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxb/CustomizationParser.java
+++
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxb/CustomizationParser.java
@@ -109,8 +109,7 @@ public final class CustomizationParser {
// Schema Namespace to Package customizations
for (String ns : env.getNamespacePackageMap().keySet()) {
- File file = JAXBUtils.getPackageMappingSchemaBindingFile(ns,
env.mapPackageName(ns));
- packageFiles.add(new InputSource(file.toURI().toString()));
+ packageFiles.add(JAXBUtils.getPackageMappingSchemaBinding(ns,
env.mapPackageName(ns)));
}
}
diff --git
a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
b/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
index 0b5741a..bb42370 100644
---
a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
+++
b/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
@@ -468,13 +468,8 @@ public class JAXBDataBinding implements DataBindingProfile
{
private void parseSchemas(SchemaCompiler schemaCompiler) {
for (String ns : context.getNamespacePackageMap().keySet()) {
- File file = JAXBUtils.getPackageMappingSchemaBindingFile(ns,
context.mapPackageName(ns));
- try {
- InputSource ins = new InputSource(file.toURI().toString());
- schemaCompiler.parseSchema(ins);
- } finally {
- FileUtils.delete(file);
- }
+ schemaCompiler.parseSchema(
+ JAXBUtils.getPackageMappingSchemaBinding(ns,
context.mapPackageName(ns)));
}
if (context.getPackageName() != null) {