You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/08/21 07:58:07 UTC

[camel] 12/20: Restructure marshal/unmarshal Implement unmarshal Add karaf feature and test

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

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

commit f5d494f506daf66e17433131b573179408cfa3d0
Author: Roberto Flores <be...@gmail.com>
AuthorDate: Mon Jul 22 00:53:09 2019 -0500

    Restructure marshal/unmarshal
    Implement unmarshal
    Add karaf feature and test
---
 components/camel-any23/pom.xml                     |  9 +--
 .../src/main/docs/any23-dataformat.adoc            | 27 ++-----
 .../camel/dataformat/any23/Any23DataFormat.java    | 85 +++++++++++++++++-----
 .../camel/dataformat/any23/Any23OutputFormat.java  |  2 +-
 .../camel/dataformat/any23/utils/Any23Utils.java   |  5 ++
 .../dataformat/any23/writer/RDF4JModelWriter.java  | 68 +++++++++++++++++
 .../any23/Any23DataFormatConfigurationsTest.java   |  2 +-
 .../any23/Any23DataFormatDefaultTest.java          |  8 +-
 .../any23/Any23DataFormatExtractorsTest.java       |  3 +-
 ...ltTest.java => Any23DataFormatMarshalTest.java} | 17 ++---
 ...aultTest.java => Any23DataFormatModelTest.java} | 15 ++--
 .../any23/Any23DataFormatOutputFormatTest.java     |  2 +-
 .../camel/model/dataformat/Any23DataFormat.java    |  2 +-
 .../apache/camel/model/dataformat/Any23Type.java   |  2 +-
 .../reifier/dataformat/Any23DataFormatReifier.java |  5 ++
 .../modules/ROOT/pages/any23-dataformat.adoc       | 27 ++-----
 parent/pom.xml                                     | 16 ++++
 .../karaf/features/src/main/resources/features.xml |  4 +
 .../components-starter/camel-any23-starter/pom.xml | 16 ++++
 .../camel-spring-boot-dependencies/pom.xml         | 10 +++
 .../apache/camel/itest/karaf/CamelAny23Test.java   | 23 +++---
 21 files changed, 235 insertions(+), 113 deletions(-)

diff --git a/components/camel-any23/pom.xml b/components/camel-any23/pom.xml
index 0330ca0..dcc19fc 100644
--- a/components/camel-any23/pom.xml
+++ b/components/camel-any23/pom.xml
@@ -72,17 +72,10 @@
     <dependency>
       <groupId>org.apache.any23</groupId>
       <artifactId>apache-any23-core</artifactId>
-      <version>2.3</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.rdf4j</groupId>
-      <artifactId>rdf4j-rio-rdfxml</artifactId>
-      <version>3.0.0-M1</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.rdf4j</groupId>
-      <artifactId>rdf4j-rio-turtle</artifactId>
-      <version>3.0.0-M1</version>
+      <artifactId>rdf4j-runtime</artifactId>
     </dependency>
   </dependencies>
 </project>
diff --git a/components/camel-any23/src/main/docs/any23-dataformat.adoc b/components/camel-any23/src/main/docs/any23-dataformat.adoc
index 3155e14..5a8b0ad 100644
--- a/components/camel-any23/src/main/docs/any23-dataformat.adoc
+++ b/components/camel-any23/src/main/docs/any23-dataformat.adoc
@@ -1,28 +1,11 @@
 [[any23-dataformat]]
 == Any23 DataFormat
-== TidyMarkup DataFormat
-*Available as of Camel version 1.0*
-
-
-*Available as of Camel version 1.0*
-
-TidyMarkup is a Data Format that uses the
-http://www.ccil.org/~cowan/XML/tagsoup/[TagSoup] to tidy up HTML. It can
-be used to parse ugly HTML and return it as pretty wellformed HTML.
-
-*Camel eats our own -dog food- soap*
-
-We had some issues in our pdf Manual where we had some
-strange symbols. So http://janstey.blogspot.com/[Jonathan] used this
-data format to tidy up the wiki html pages that are used as base for
-rendering the pdf manuals. And then the mysterious symbols vanished.
-
-TidyMarkup only supports the *unmarshal* operation
-as we really don't want to turn well formed HTML into ugly HTML.
-
-### TidyMarkup Options
+== Any23 DataFormat
+*Available as of Camel version 3.0*
+Any23 is a Data Format that is intended to convert HTML from a site (or file) into rdf.
 
 
+### Any23 Options
 
 // dataformat options: START
 The Any23 dataformat supports 5 options, which are listed below.
@@ -32,7 +15,7 @@ The Any23 dataformat supports 5 options, which are listed below.
 [width="100%",cols="2s,1m,1m,6",options="header"]
 |===
 | Name | Default | Java Type | Description
-| outputFormat | MODEL | Any23Type | 
+| outputFormat | RDF4JMODEL | Any23Type | 
 | configurations |  | Map | 
 | extractors |  | List | 
 | baseURI |  | String | 
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
index 2400b0a..5f2abdc 100644
--- a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
@@ -16,25 +16,30 @@
  */
 package org.apache.camel.dataformat.any23;
 
+import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import org.apache.any23.Any23;
 import org.apache.any23.configuration.DefaultConfiguration;
 import org.apache.any23.configuration.ModifiableConfiguration;
-import org.apache.any23.source.DocumentSource;
-import org.apache.any23.source.StringDocumentSource;
+import org.apache.any23.source.ByteArrayDocumentSource;
 import org.apache.any23.writer.TripleHandler;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.dataformat.any23.utils.Any23Utils;
+import org.apache.camel.dataformat.any23.writer.RDF4JModelWriter;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.spi.annotations.Dataformat;
-import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.commons.io.IOUtils;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.eclipse.rdf4j.rio.Rio;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,6 +62,31 @@ public class Any23DataFormat extends ServiceSupport implements DataFormat, DataF
   private Any23OutputFormat outputFormat;
   private String baseURI;
 
+  public Any23DataFormat() {
+  }
+
+  public Any23DataFormat(String baseURI) {
+    this.baseURI = baseURI;
+  }
+
+  public Any23DataFormat(Any23OutputFormat outputFormat, String baseURI) {
+    this.outputFormat = outputFormat;
+    this.baseURI = baseURI;
+  }
+
+  public Any23DataFormat(Map<String, String> configurations, Any23OutputFormat outputFormat, String baseURI) {
+    this.configurations = configurations;
+    this.outputFormat = outputFormat;
+    this.baseURI = baseURI;
+  }
+
+  public Any23DataFormat(Map<String, String> configurations, List<String> extractors, Any23OutputFormat outputFormat, String baseURI) {
+    this.configurations = configurations;
+    this.extractors = extractors;
+    this.outputFormat = outputFormat;
+    this.baseURI = baseURI;
+  }
+
   @Override
   public String getDataFormatName() {
     return "any23";
@@ -66,22 +96,34 @@ public class Any23DataFormat extends ServiceSupport implements DataFormat, DataF
    * Marshal data. Generate RDF.
    */
   public void marshal(Exchange exchange, Object object, OutputStream outputStream) throws Exception {
-    final String payload = ExchangeHelper.convertToMandatoryType(exchange, String.class, object);
-    DocumentSource source = new StringDocumentSource(payload, baseURI);
-    TripleHandler handler = Any23Utils.obtainHandler(outputFormat, outputStream);
-    any23.extract(source, handler);
-    handler.close();
+    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
+    outputStreamWriter.write("<html><script type=\"application/ld+json\">\n");
+    outputStreamWriter.flush();
+    Model mdl = (Model) object;
+    Rio.write(mdl, outputStream, RDFFormat.JSONLD);
+    outputStreamWriter.write("\n</script></html>");
+    outputStreamWriter.flush();
+    outputStreamWriter.close();
+    outputStream.close();
   }
 
   /**
    * Unmarshal the data
    */
   public Object unmarshal(Exchange exchange, InputStream inputStream) throws Exception {
-    //TODO
-    //Under construction
-    //Looking for libraries which could perform RDF -> HTML 
-    //Candidate: https://github.com/rhizomik/redefer-rdf2html
-    return null;
+    ByteArrayDocumentSource source = new ByteArrayDocumentSource(inputStream, this.baseURI, null);
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    TripleHandler handler = Any23Utils.obtainHandler(outputFormat, out);
+    any23.extract(source, handler);
+    handler.close();
+    Object respon;
+    if (outputFormat == Any23OutputFormat.RDF4JMODEL) {
+      respon = ((RDF4JModelWriter) handler).getModel();
+    } else {
+      respon = IOUtils.toString(out.toByteArray());
+    }
+    return respon;
+
   }
 
   @Override
@@ -100,7 +142,7 @@ public class Any23DataFormat extends ServiceSupport implements DataFormat, DataF
     }
     if (outputFormat == null) {
       //Default output format
-      outputFormat = Any23OutputFormat.RDFXML;
+      outputFormat = Any23OutputFormat.RDF4JMODEL;
     }
     if (conf == null && extrArray == null) {
       any23 = new Any23();
@@ -122,40 +164,45 @@ public class Any23DataFormat extends ServiceSupport implements DataFormat, DataF
     return any23;
   }
 
-  public void setAny23(Any23 any23) {
+  public Any23DataFormat setAny23(Any23 any23) {
     this.any23 = any23;
+    return this;
   }
 
   public Map<String, String> getConfigurations() {
     return configurations;
   }
 
-  public void setConfigurations(Map<String, String> configurations) {
+  public Any23DataFormat setConfigurations(Map<String, String> configurations) {
     this.configurations = configurations;
+    return this;
   }
 
   public List<String> getExtractors() {
     return extractors;
   }
 
-  public void setExtractors(List<String> extractors) {
+  public Any23DataFormat setExtractors(List<String> extractors) {
     this.extractors = extractors;
+    return this;
   }
 
   public Any23OutputFormat getOutputFormat() {
     return outputFormat;
   }
 
-  public void setOutputFormat(Any23OutputFormat outputFormat) {
+  public Any23DataFormat setOutputFormat(Any23OutputFormat outputFormat) {
     this.outputFormat = outputFormat;
+    return this;
   }
 
   public String getBaseURI() {
     return baseURI;
   }
 
-  public void setBaseURI(String baseURI) {
+  public Any23DataFormat setBaseURI(String baseURI) {
     this.baseURI = baseURI;
+    return this;
   }
 
 }
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23OutputFormat.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23OutputFormat.java
index 3d4d12a..fa643ca 100644
--- a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23OutputFormat.java
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23OutputFormat.java
@@ -17,5 +17,5 @@
 package org.apache.camel.dataformat.any23;
 
 public enum Any23OutputFormat {
-  NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON
+  NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL
 }
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
index 6c97a5e..09537d9 100644
--- a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
@@ -25,6 +25,8 @@ import org.apache.any23.writer.RDFXMLWriter;
 import org.apache.any23.writer.TripleHandler;
 import org.apache.any23.writer.TurtleWriter;
 import org.apache.camel.dataformat.any23.Any23OutputFormat;
+import org.apache.camel.dataformat.any23.writer.RDF4JModelWriter;
+import org.eclipse.rdf4j.model.impl.LinkedHashModel;
 
 public class Any23Utils {
 
@@ -49,6 +51,9 @@ public class Any23Utils {
       case RDFJSON:
         handler = new JSONWriter(outputStream);
         break;
+      case RDF4JMODEL:
+        handler = new RDF4JModelWriter(new LinkedHashModel());
+        break;
       default:
         throw new AssertionError(format.name());
     }
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/writer/RDF4JModelWriter.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/writer/RDF4JModelWriter.java
new file mode 100644
index 0000000..5e60f00
--- /dev/null
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/writer/RDF4JModelWriter.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dataformat.any23.writer;
+
+import org.apache.any23.writer.FormatWriter;
+import org.apache.any23.writer.TripleHandlerException;
+import org.apache.any23.writer.TripleWriterHandler;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Value;
+
+public class RDF4JModelWriter extends TripleWriterHandler implements FormatWriter {
+
+  private Model model;
+
+  public RDF4JModelWriter(Model model) {
+    this.model = model;
+  }
+
+  @Override
+  public void close() throws TripleHandlerException {
+    //noop
+  }
+
+  @Override
+  public void writeTriple(Resource s, IRI p, Value o, Resource g) throws TripleHandlerException {
+    model.add(s, p, o, g);
+  }
+
+  @Override
+  public void writeNamespace(String prefix, String uri) throws TripleHandlerException {
+    //noop
+  }
+
+  @Override
+  public boolean isAnnotated() {
+    return false;
+  }
+
+  @Override
+  public void setAnnotated(boolean f) {
+    //noop
+  }
+
+  public Model getModel() {
+    return model;
+  }
+
+  public void setModel(Model model) {
+    this.model = model;
+  }
+
+}
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
index d7c34dd..c18eebc 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
@@ -58,7 +58,7 @@ public class Any23DataFormatConfigurationsTest extends CamelTestSupport {
       public void configure() {
         Map<String, String> conf = new HashMap();
         conf.put("any23.extraction.metadata.nesting", "off");
-        from("direct:start").marshal().any23(BASEURI, Any23Type.TURTLE, conf).to("mock:result");
+        from("direct:start").unmarshal().any23(BASEURI, Any23Type.TURTLE, conf).to("mock:result");
       }
     };
   }
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
index 244dedd..fee62a5 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
@@ -42,10 +42,8 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
     List<Exchange> list = resultEndpoint.getReceivedExchanges();
     for (Exchange exchange : list) {
       Message in = exchange.getIn();
-      String resultingRDF = in.getBody(String.class);
-      InputStream toInputStream = IOUtils.toInputStream(resultingRDF);
-      Model parse = Rio.parse(toInputStream, BASEURI, RDFFormat.RDFXML);
-      assertEquals(parse.size(), 28);
+      Model resultingRDF = in.getBody(Model.class);
+      assertEquals(resultingRDF.size(), 28);
     }
   }
 
@@ -53,7 +51,7 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
   protected RouteBuilder createRouteBuilder() {
     return new RouteBuilder() {
       public void configure() {
-        from("direct:start").marshal().any23(BASEURI).to("mock:result");
+        from("direct:start").unmarshal().any23(BASEURI).to("mock:result");
       }
     };
   }
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
index 1cf88e6..533c7e1 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
@@ -47,7 +47,6 @@ public class Any23DataFormatExtractorsTest extends CamelTestSupport {
     for (Exchange exchange : list) {
       Message in = exchange.getIn();
       String resultingRDF = in.getBody(String.class);
-      System.out.println(resultingRDF);
       InputStream toInputStream = IOUtils.toInputStream(resultingRDF);
       Model parse = Rio.parse(toInputStream, BASEURI, RDFFormat.TURTLE);
       assertEquals(parse.size(), 1);
@@ -62,7 +61,7 @@ public class Any23DataFormatExtractorsTest extends CamelTestSupport {
         conf.put("any23.extraction.metadata.nesting", "off");
         List<String> extc = new ArrayList();
         extc.add("html-head-title");
-        from("direct:start").marshal().any23(BASEURI, Any23Type.TURTLE, conf, extc).to("mock:result");
+        from("direct:start").unmarshal().any23(BASEURI, Any23Type.TURTLE, conf, extc).to("mock:result");
       }
     };
   }
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
similarity index 78%
copy from components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
copy to components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
index 244dedd..e5c55e1 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
@@ -17,20 +17,16 @@
 package org.apache.camel.dataformat.any23;
 
 import java.io.File;
-import java.io.InputStream;
 import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.commons.io.IOUtils;
 import org.eclipse.rdf4j.model.Model;
-import org.eclipse.rdf4j.rio.RDFFormat;
-import org.eclipse.rdf4j.rio.Rio;
 import org.junit.Test;
 
-public class Any23DataFormatDefaultTest extends CamelTestSupport {
+public class Any23DataFormatMarshalTest extends CamelTestSupport {
 
   private final String BASEURI = "http://mock.foo/bar";
 
@@ -42,10 +38,8 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
     List<Exchange> list = resultEndpoint.getReceivedExchanges();
     for (Exchange exchange : list) {
       Message in = exchange.getIn();
-      String resultingRDF = in.getBody(String.class);
-      InputStream toInputStream = IOUtils.toInputStream(resultingRDF);
-      Model parse = Rio.parse(toInputStream, BASEURI, RDFFormat.RDFXML);
-      assertEquals(parse.size(), 28);
+      Model resultingRDF = in.getBody(Model.class);
+      assertEquals(resultingRDF.size(), 28);
     }
   }
 
@@ -53,7 +47,10 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
   protected RouteBuilder createRouteBuilder() {
     return new RouteBuilder() {
       public void configure() {
-        from("direct:start").marshal().any23(BASEURI).to("mock:result");
+        Any23DataFormat df = new Any23DataFormat().setBaseURI(BASEURI).setOutputFormat(Any23OutputFormat.RDF4JMODEL);
+        from("direct:start").unmarshal(df).to("direct:r1");
+        from("direct:r1").marshal(df).to("direct:r2");
+        from("direct:r2").unmarshal(df).to("mock:result");
       }
     };
   }
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
similarity index 78%
copy from components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
copy to components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
index 244dedd..14ead31 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
@@ -17,20 +17,17 @@
 package org.apache.camel.dataformat.any23;
 
 import java.io.File;
-import java.io.InputStream;
 import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.dataformat.Any23Type;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.commons.io.IOUtils;
 import org.eclipse.rdf4j.model.Model;
-import org.eclipse.rdf4j.rio.RDFFormat;
-import org.eclipse.rdf4j.rio.Rio;
 import org.junit.Test;
 
-public class Any23DataFormatDefaultTest extends CamelTestSupport {
+public class Any23DataFormatModelTest extends CamelTestSupport {
 
   private final String BASEURI = "http://mock.foo/bar";
 
@@ -42,10 +39,8 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
     List<Exchange> list = resultEndpoint.getReceivedExchanges();
     for (Exchange exchange : list) {
       Message in = exchange.getIn();
-      String resultingRDF = in.getBody(String.class);
-      InputStream toInputStream = IOUtils.toInputStream(resultingRDF);
-      Model parse = Rio.parse(toInputStream, BASEURI, RDFFormat.RDFXML);
-      assertEquals(parse.size(), 28);
+      Model resultingRDF = in.getBody(Model.class);
+      assertEquals(resultingRDF.size(), 28);
     }
   }
 
@@ -53,7 +48,7 @@ public class Any23DataFormatDefaultTest extends CamelTestSupport {
   protected RouteBuilder createRouteBuilder() {
     return new RouteBuilder() {
       public void configure() {
-        from("direct:start").marshal().any23(BASEURI).to("mock:result");
+        from("direct:start").unmarshal().any23(BASEURI, Any23Type.RDF4JMODEL).to("mock:result");
       }
     };
   }
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
index d00c196..ecdd9b2 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
@@ -54,7 +54,7 @@ public class Any23DataFormatOutputFormatTest extends CamelTestSupport {
   protected RouteBuilder createRouteBuilder() {
     return new RouteBuilder() {
       public void configure() {
-        from("direct:start").marshal().any23(BASEURI, Any23Type.TURTLE).to("mock:result");
+        from("direct:start").unmarshal().any23(BASEURI, Any23Type.TURTLE).to("mock:result");
       }
     };
   }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
index 2b9180e..0560836 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
@@ -35,7 +35,7 @@ import org.apache.camel.spi.Metadata;
 public class Any23DataFormat extends DataFormatDefinition {
 
   @XmlAttribute
-  @Metadata(defaultValue = "RDFXML")
+  @Metadata(defaultValue = "RDF4JMODEL")
   private Any23Type outputFormat;
   @XmlElement
   private Map<String, String> configurations;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java
index bdd0a59..1eb81b2 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java
@@ -26,5 +26,5 @@ import javax.xml.bind.annotation.XmlType;
 @XmlEnum
 public enum Any23Type {
 
-  NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON
+  NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON, RDF4JMODEL
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
index 8f33e6a..f752ce9 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/Any23DataFormatReifier.java
@@ -28,6 +28,11 @@ public class Any23DataFormatReifier extends DataFormatReifier<Any23DataFormat> {
   }
 
   @Override
+  protected DataFormat doCreateDataFormat(CamelContext camelContext) {
+    return super.doCreateDataFormat(camelContext);
+  }
+
+  @Override
   protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
     if (definition.getOutputFormat() != null) {
       setProperty(camelContext, dataFormat, "outputFormat", definition.getOutputFormat());
diff --git a/docs/components/modules/ROOT/pages/any23-dataformat.adoc b/docs/components/modules/ROOT/pages/any23-dataformat.adoc
index 3155e14..5a8b0ad 100644
--- a/docs/components/modules/ROOT/pages/any23-dataformat.adoc
+++ b/docs/components/modules/ROOT/pages/any23-dataformat.adoc
@@ -1,28 +1,11 @@
 [[any23-dataformat]]
 == Any23 DataFormat
-== TidyMarkup DataFormat
-*Available as of Camel version 1.0*
-
-
-*Available as of Camel version 1.0*
-
-TidyMarkup is a Data Format that uses the
-http://www.ccil.org/~cowan/XML/tagsoup/[TagSoup] to tidy up HTML. It can
-be used to parse ugly HTML and return it as pretty wellformed HTML.
-
-*Camel eats our own -dog food- soap*
-
-We had some issues in our pdf Manual where we had some
-strange symbols. So http://janstey.blogspot.com/[Jonathan] used this
-data format to tidy up the wiki html pages that are used as base for
-rendering the pdf manuals. And then the mysterious symbols vanished.
-
-TidyMarkup only supports the *unmarshal* operation
-as we really don't want to turn well formed HTML into ugly HTML.
-
-### TidyMarkup Options
+== Any23 DataFormat
+*Available as of Camel version 3.0*
+Any23 is a Data Format that is intended to convert HTML from a site (or file) into rdf.
 
 
+### Any23 Options
 
 // dataformat options: START
 The Any23 dataformat supports 5 options, which are listed below.
@@ -32,7 +15,7 @@ The Any23 dataformat supports 5 options, which are listed below.
 [width="100%",cols="2s,1m,1m,6",options="header"]
 |===
 | Name | Default | Java Type | Description
-| outputFormat | MODEL | Any23Type | 
+| outputFormat | RDF4JMODEL | Any23Type | 
 | configurations |  | Map | 
 | extractors |  | List | 
 | baseURI |  | String | 
diff --git a/parent/pom.xml b/parent/pom.xml
index 445abf9..a91078f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -50,6 +50,7 @@
         <antlr-bundle-version>3.5.2_1</antlr-bundle-version>
         <antlr-runtime-bundle-version>3.5.2_1</antlr-runtime-bundle-version>
         <apacheds-version>2.0.0-M24</apacheds-version>
+        <apache-any23-version>2.3</apache-any23-version>
         <apache-drill-version>1.16.0</apache-drill-version>
         <apache-gora-version>0.9</apache-gora-version>
         <apache-mime4j-version>0.8.3</apache-mime4j-version>
@@ -528,6 +529,7 @@
         <quartz-version>2.3.1</quartz-version>
         <quickfixj-version>2.1.1</quickfixj-version>
         <rabbitmq-amqp-client-version>5.7.3</rabbitmq-amqp-client-version>
+        <rdf4j-version>3.0.0-M1</rdf4j-version>
         <reactive-streams-version>1.0.2</reactive-streams-version>
         <reactor-version>3.2.11.RELEASE</reactor-version>
         <reflections-bundle-version>0.9.11_1</reflections-bundle-version>
@@ -4892,6 +4894,20 @@
                 <artifactId>tagsoup</artifactId>
                 <version>${tagsoup-version}</version>
             </dependency>
+            
+            <!-- optional Any23 -->
+            <dependency>
+                <groupId>org.apache.any23</groupId>
+                <artifactId>apache-any23-core</artifactId>
+                <version>${apache-any23-version}</version>
+            </dependency>
+            
+            <!-- optional RDF4J -->
+            <dependency>
+                <groupId>org.eclipse.rdf4j</groupId>
+                <artifactId>rdf4j-runtime</artifactId>
+                <version>${rdf4j-version}</version>
+            </dependency>
 
             <!-- optional Axiom -->
             <dependency>
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 9188304..adcebd3 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -170,6 +170,10 @@
     <bundle dependency='true'>mvn:io.netty/netty-transport-native-unix-common/${netty-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-amqp/${project.version}</bundle>
   </feature>
+  <feature name='camel-any23' version='${project.version}' start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle>mvn:org.apache.camel/camel-any23/${project.version}</bundle>
+  </feature>
   <feature name='camel-apns' version='${project.version}' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle dependency='true'>mvn:org.apache.mina/mina-core/${mina-version}</bundle>
diff --git a/platforms/spring-boot/components-starter/camel-any23-starter/pom.xml b/platforms/spring-boot/components-starter/camel-any23-starter/pom.xml
index 3bb59a6..801bc39 100644
--- a/platforms/spring-boot/components-starter/camel-any23-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/camel-any23-starter/pom.xml
@@ -38,6 +38,22 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-any23</artifactId>
       <version>${project.version}</version>
+      <!--START OF GENERATED CODE-->
+      <exclusions>
+        <exclusion>
+          <groupId>ch.qos.logback</groupId>
+          <artifactId>logback-classic</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>ch.qos.logback</groupId>
+          <artifactId>logback-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+      <!--END OF GENERATED CODE-->
     </dependency>
     <!--START OF GENERATED CODE-->
     <dependency>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 3764ce2..3f1bc85 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -226,6 +226,11 @@
         <version>1.1.3</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.any23</groupId>
+        <artifactId>apache-any23-core</artifactId>
+        <version>2.3</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.avro</groupId>
         <artifactId>avro</artifactId>
         <version>1.8.2</version>
@@ -3761,6 +3766,11 @@
         </exclusions>
       </dependency>
       <dependency>
+        <groupId>org.eclipse.rdf4j</groupId>
+        <artifactId>rdf4j-runtime</artifactId>
+        <version>3.0.0-M1</version>
+      </dependency>
+      <dependency>
         <groupId>org.hamcrest</groupId>
         <artifactId>java-hamcrest</artifactId>
         <version>2.0.0.0</version>
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAny23Test.java
similarity index 67%
copy from core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java
copy to tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAny23Test.java
index bdd0a59..0415345 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/Any23Type.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAny23Test.java
@@ -14,17 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.model.dataformat;
+package org.apache.camel.itest.karaf;
 
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlType;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
 
-/**
- * Represents the different types of bindy data formats.
- */
-@XmlType
-@XmlEnum
-public enum Any23Type {
+@RunWith(PaxExam.class)
+public class CamelAny23Test extends BaseKarafTest {
+
+  public static final String COMPONENT = extractName(CamelAny23Test.class);
+
+  @Test
+  public void test() throws Exception {
+    testDataFormat(COMPONENT, "any23");
+  }
 
-  NTRIPLES, TURTLE, NQUADS, RDFXML, JSONLD, RDFJSON
 }