diff --git a/jaxb-plugins-parent/tests/fluentapi/pom.xml b/jaxb-plugins-parent/tests/fluentapi/pom.xml
new file mode 100644
index 000000000..56f5fb2d8
--- /dev/null
+++ b/jaxb-plugins-parent/tests/fluentapi/pom.xml
@@ -0,0 +1,41 @@
+
+ 4.0.0
+
+ org.jvnet.jaxb
+ jaxb-plugins-tests
+ 4.0.6-SNAPSHOT
+
+ jaxb-plugins-test-fluentapi
+ jar
+ JAXB Tools :: JAXB Plugins :: Test [fluent-api]
+
+
+ org.jvnet.jaxb
+ jaxb-maven-plugin-testing
+ test
+
+
+
+ test
+
+
+ org.jvnet.jaxb
+ jaxb-maven-plugin
+
+ true
+
+ -Xfluent-api
+
+
+
+ org.jvnet.jaxb
+ jaxb-plugins
+
+
+
+
+
+
+
diff --git a/jaxb-plugins-parent/tests/fluentapi/src/main/resources/Example.xsd b/jaxb-plugins-parent/tests/fluentapi/src/main/resources/Example.xsd
new file mode 100644
index 000000000..e05637e3d
--- /dev/null
+++ b/jaxb-plugins-parent/tests/fluentapi/src/main/resources/Example.xsd
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/BaseTest.java b/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/BaseTest.java
new file mode 100644
index 000000000..2945b03a2
--- /dev/null
+++ b/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/BaseTest.java
@@ -0,0 +1,38 @@
+package org.jvnet.jaxb.tests.fluentapi;
+
+import generated.Base;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.GregorianCalendar;
+
+public class BaseTest {
+
+ @Test
+ public void testBase() throws DatatypeConfigurationException {
+ XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
+ byte[] textBytes = "String".getBytes(StandardCharsets.UTF_8);
+ Base b = new Base()
+ .withA("String")
+ .withB(xgc)
+ .withC(xgc)
+ .withD(xgc)
+ .withE(textBytes)
+ .withListOfString("a", "b", "c")
+ .withListOfString(Arrays.asList("e", "f", "g"));
+
+ Assert.assertEquals("String", b.getA());
+ Assert.assertEquals(xgc, b.getB());
+ Assert.assertEquals(xgc, b.getC());
+ Assert.assertEquals(xgc, b.getD());
+ Assert.assertEquals(textBytes, b.getE());
+ Assert.assertNotNull(b.getListOfString());
+ Assert.assertEquals(6, b.getListOfString().size());
+ Assert.assertTrue(b.getListOfString().containsAll(Arrays.asList("a", "b", "c", "e", "f", "g")));
+ }
+}
diff --git a/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/PrimitivesAndUnboxedPrimitivesTest.java b/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/PrimitivesAndUnboxedPrimitivesTest.java
new file mode 100644
index 000000000..006b6c7f6
--- /dev/null
+++ b/jaxb-plugins-parent/tests/fluentapi/src/test/java/org/jvnet/jaxb/tests/fluentapi/PrimitivesAndUnboxedPrimitivesTest.java
@@ -0,0 +1,49 @@
+package org.jvnet.jaxb.tests.fluentapi;
+
+import generated.Primitives;
+import generated.UnboxedPrimitives;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PrimitivesAndUnboxedPrimitivesTest {
+
+ @Test
+ public void testPrimitives() {
+ Primitives p = new Primitives()
+ .withBoolean(true)
+ .withInt(1)
+ .withLong(10L)
+ .withDouble(20d)
+ .withFloat(40.0f)
+ .withByte((byte) 80)
+ .withShort((short) 160);
+
+ Assert.assertEquals(true, p.isBoolean());
+ Assert.assertEquals(1, p.getInt());
+ Assert.assertEquals(10L, p.getLong());
+ Assert.assertEquals(20d, p.getDouble(), 0);
+ Assert.assertEquals(40.0f, p.getFloat(), 0);
+ Assert.assertEquals((byte) 80, p.getByte());
+ Assert.assertEquals((short) 160, p.getShort());
+ }
+
+ @Test
+ public void testUnboxedPrimitives() {
+ UnboxedPrimitives u = new UnboxedPrimitives()
+ .withUnboxedBoolean(Boolean.TRUE)
+ .withUnboxedInt(Integer.valueOf(1))
+ .withUnboxedLong(Long.valueOf(10))
+ .withUnboxedDouble(Double.valueOf(20d))
+ .withUnboxedFloat(Float.valueOf(40.0f))
+ .withUnboxedByte(Byte.valueOf((byte) 80))
+ .withUnboxedShort(Short.valueOf((short) 160));
+
+ Assert.assertEquals(Boolean.TRUE, u.isUnboxedBoolean());
+ Assert.assertEquals(Integer.valueOf(1), u.getUnboxedInt());
+ Assert.assertEquals(Long.valueOf(10), u.getUnboxedLong());
+ Assert.assertEquals(Double.valueOf(20d), u.getUnboxedDouble());
+ Assert.assertEquals(Float.valueOf(40.0f), u.getUnboxedFloat());
+ Assert.assertEquals(Byte.valueOf((byte) 80), u.getUnboxedByte());
+ Assert.assertEquals(Short.valueOf((short) 160), u.getUnboxedShort());
+ }
+}
diff --git a/jaxb-plugins-parent/tests/fluentapi/src/test/resources/log4j.properties b/jaxb-plugins-parent/tests/fluentapi/src/test/resources/log4j.properties
new file mode 100644
index 000000000..ca4ee5e2c
--- /dev/null
+++ b/jaxb-plugins-parent/tests/fluentapi/src/test/resources/log4j.properties
@@ -0,0 +1,5 @@
+log4j.rootCategory=DEBUG, stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.target=system.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
diff --git a/jaxb-plugins-parent/tests/pom.xml b/jaxb-plugins-parent/tests/pom.xml
index 886be6a25..455821425 100644
--- a/jaxb-plugins-parent/tests/pom.xml
+++ b/jaxb-plugins-parent/tests/pom.xml
@@ -20,6 +20,7 @@
defaultvalue
elementwrapper
episodes
+ fluentapi
ignoring
issues
issues-legacy-ns