You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/04/24 07:31:59 UTC

[camel] branch master updated: CAMEL-13446: Make camel-xpath build

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ecde142  CAMEL-13446: Make camel-xpath build
ecde142 is described below

commit ecde1424b862f904d4574270796355dc2b2d8039
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Apr 24 09:31:37 2019 +0200

    CAMEL-13446: Make camel-xpath build
---
 components/camel-xpath/src/main/schema/xpath.json  | 27 ++++++++++++++++++++++
 .../camel/model/language/XPathExpression.java      |  3 +++
 .../maven/packaging/PackageComponentMojo.java      |  2 --
 .../camel/maven/packaging/PackageLanguageMojo.java | 21 +++++++++++++----
 .../maven/packaging/PrepareComponentMojo.java      |  2 +-
 5 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/components/camel-xpath/src/main/schema/xpath.json b/components/camel-xpath/src/main/schema/xpath.json
new file mode 100644
index 0000000..c3234c1
--- /dev/null
+++ b/components/camel-xpath/src/main/schema/xpath.json
@@ -0,0 +1,27 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "xpath",
+    "title": "XPath",
+    "description": "To use XPath (XML) in Camel expressions or predicates.",
+    "firstVersion": "1.1.0",
+    "javaType": "org.apache.camel.model.language.XPathExpression",
+    "label": "language,core,xml",
+    "deprecated": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "expression": { "kind": "value", "displayName": "Expression", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The expression value in your chosen language syntax" },
+    "documentType": { "kind": "attribute", "displayName": "Document Type", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of class for document type The default value is org.w3c.dom.Document" },
+    "resultType": { "kind": "attribute", "displayName": "Result Type", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "BOOLEAN", "NODE", "NODESET", "NUMBER", "STRING" ], "deprecated": false, "secret": false, "defaultValue": "NODESET", "description": "Sets the class name of the result type (type from output) The default result type is NodeSet" },
+    "saxon": { "kind": "attribute", "displayName": "Saxon", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether to use Saxon." },
+    "factoryRef": { "kind": "attribute", "displayName": "Factory Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "References to a custom XPathFactory to lookup in the registry" },
+    "objectModel": { "kind": "attribute", "displayName": "Object Model", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The XPath object model to use" },
+    "logNamespaces": { "kind": "attribute", "displayName": "Log Namespaces", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether to log namespaces which can assist during trouble shooting" },
+    "headerName": { "kind": "attribute", "displayName": "Header Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Name of header to use as input, instead of the message body" },
+    "threadSafety": { "kind": "attribute", "displayName": "Thread Safety", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrent [...]
+    "trim": { "kind": "attribute", "displayName": "Trim", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "defaultValue": true, "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Sets the id of this node" }
+  }
+}
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
index 27ec20d..4e68c44 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
@@ -37,6 +37,9 @@ import org.apache.camel.util.ObjectHelper;
 @XmlRootElement(name = "xpath")
 @XmlAccessorType(XmlAccessType.FIELD)
 public class XPathExpression extends NamespaceAwareExpression {
+
+    // IMPORTANT: If updating this file, then also update the file components/camel-xpath/src/main/schema/xpath.json
+
     @XmlAttribute(name = "documentType")
     private String documentTypeName;
     @XmlAttribute(name = "resultType") @Metadata(defaultValue = "NODESET", enums = "NUMBER,STRING,BOOLEAN,NODESET,NODE")
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java
index 7f0be09..60d240e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java
@@ -34,7 +34,6 @@ import org.apache.maven.project.MavenProjectHelper;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 import static org.apache.camel.maven.packaging.PackageHelper.loadText;
-import static org.apache.camel.maven.packaging.PackageHelper.writeText;
 
 /**
  * Analyses the Camel plugins in a project and generates extra descriptor information for easier auto-discovery in Camel.
@@ -50,7 +49,6 @@ public class PackageComponentMojo extends AbstractGeneratorMojo {
 
     /**
      * The project build directory
-     *
      */
     @Parameter(defaultValue = "${project.build.directory}")
     protected File buildDir;
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
index ce13061..a0681bb 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java
@@ -59,6 +59,12 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
     protected File schemaOutDir;
 
     /**
+     * The project build directory
+     */
+    @Parameter(defaultValue = "${project.build.directory}")
+    protected File buildDir;
+
+    /**
      * Execute goal.
      *
      * @throws org.apache.maven.plugin.MojoExecutionException execution of the main class or one of the
@@ -66,10 +72,10 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
      * @throws org.apache.maven.plugin.MojoFailureException   something bad happened...
      */
     public void execute() throws MojoExecutionException, MojoFailureException {
-        prepareLanguage(getLog(), project, projectHelper, languageOutDir, schemaOutDir, buildContext);
+        prepareLanguage(getLog(), project, projectHelper, buildDir, languageOutDir, schemaOutDir, buildContext);
     }
 
-    public static int prepareLanguage(Log log, MavenProject project, MavenProjectHelper projectHelper, File languageOutDir,
+    public static int prepareLanguage(Log log, MavenProject project, MavenProjectHelper projectHelper, File buildDir, File languageOutDir,
                                       File schemaOutDir, BuildContext buildContext) throws MojoExecutionException {
 
         File camelMetaDir = new File(languageOutDir, "META-INF/services/org/apache/camel/");
@@ -121,8 +127,7 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
                         String name = entry.getKey();
                         String javaType = entry.getValue();
                         String modelName = asModelName(name);
-                        InputStream is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/language/" + modelName + ".json"));
-                        String json = loadText(is);
+
                         LanguageModel languageModel = new LanguageModel();
                         languageModel.setName(name);
                         languageModel.setTitle("");
@@ -134,6 +139,14 @@ public class PackageLanguageMojo extends AbstractGeneratorMojo {
                         languageModel.setArtifactId(project.getArtifactId());
                         languageModel.setVersion(project.getVersion());
 
+                        InputStream is;
+                        if ("xpath".equals(name)) {
+                            // special for camel-xpath as we need to build this before camel-core so we load the schema from a static file
+                            is = new FileInputStream(new File(buildDir, "../src/main/schema/xpath.json"));
+                        } else {
+                            is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/language/" + modelName + ".json"));
+                        }
+                        String json = loadText(is);
                         List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("model", json, false);
                         for (Map<String, String> row : rows) {
                             if (row.containsKey("title")) {
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java
index 9385a16..bcab3a8 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java
@@ -118,7 +118,7 @@ public class PrepareComponentMojo extends AbstractMojo {
         int count = 0;
         count += prepareComponent(getLog(), project, projectHelper, buildDir, componentOutDir, buildContext);
         count += prepareDataFormat(getLog(), project, projectHelper, dataFormatOutDir, schemaOutDir, buildContext);
-        count += prepareLanguage(getLog(), project, projectHelper, languageOutDir, schemaOutDir, buildContext);
+        count += prepareLanguage(getLog(), project, projectHelper, buildDir, languageOutDir, schemaOutDir, buildContext);
         if (count == 0) {
             // okay its not any of the above then its other
             prepareOthers(getLog(), project, projectHelper, otherOutDir, schemaOutDir, buildContext);