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) {

Reply via email to