Repository: incubator-juneau
Updated Branches:
  refs/heads/master 1bb80a053 -> f5f5edfb6


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
index fa8b57f..36a1e71 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
@@ -21,116 +21,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * Specialized {@link PojoSwap} for surrogate classes.
- *
- * <p>
- * Surrogate classes are used in place of other classes during serialization.
- * For example, you may want to use a surrogate class to change the names or 
order of bean properties on a bean.
- *
- * <p>
- * The following is an example of a surrogate class change changes a property 
name:
- * <p class='bcode'>
- *     <jk>public class</jk> SurrogateClass {
- *             <jk>public</jk> String surrogateField;  <jc>// New bean 
property</jc>
- *
- *             <jk>public</jk> SurrogateClass(NormalClass normalClass) {
- *                     <jk>this</jk>.surrogateField = normalClass.normalField;
- *             }
- *     }
- * </p>
- *
- * <p>
- * Optionally, a public static method can be used to un-transform a class 
during parsing:
- * <p class='bcode'>
- *     <jk>public class</jk> SurrogateClass {
- *             ...
- *             <jk>public static</jk> NormalClass 
<jsm>toNormalClass</jsm>(SurrogateClass surrogateClass) {
- *                     <jk>return new</jk> 
NormalClass(surrogateClass.transformedField);
- *             }
- *     }
- * </p>
- *
- * <p>
- * Surrogate classes must conform to the following:
- * <ul class='spaced-list'>
- *     <li>
- *             It must have a one or more public constructors that take in a 
single parameter whose type is the normal types.
- *             (It is possible to define a class as a surrogate for multiple 
class types by using multiple constructors with
- *             different parameter types).
- *     <li>
- *             It optionally can have a public static method that takes in a 
single parameter whose type is the transformed
- *             type and returns an instance of the normal type.
- *             This is called the un-transform method.
- *             The method can be called anything.
- *     <li>
- *             If an un-transform method is present, the class must also 
contain a no-arg constructor (so that the
- *             transformed class can be instantiated by the parser before 
being converted into the normal class by the
- *             un-transform method).
- * </ul>
- *
- * <p>
- * Surrogate classes are associated with serializers and parsers using the 
{@link CoreObjectBuilder#pojoSwaps(Class...)}
- * method.
- * <p class='bcode'>
- *     <ja>@Test</ja>
- *     <jk>public void</jk> test() <jk>throws</jk> Exception {
- *             JsonSerializer s = <jk>new</jk> 
JsonSerializerBuilder().simple().pojoSwaps(Surrogate.<jk>class</jk>).build();
- *             JsonParser p = <jk>new</jk> 
JsonParserBuilder().pojoSwaps(Surrogate.<jk>class</jk>).build();
- *             String r;
- *             Normal n = Normal.<jsm>create</jsm>();
- *
- *             r = s.serialize(n);
- *             assertEquals(<js>"{f2:'f1'}"</js>, r);
- *
- *             n = p.parse(r, Normal.<jk>class</jk>);
- *             assertEquals(<js>"f1"</js>, n.f1);
- *     }
- *
- *     <jc>// The normal class</jc>
- *     <jk>public class</jk> Normal {
- *             <jk>public</jk> String f1;
- *
- *             <jk>public static</jk> Normal <jsm>create</jsm>() {
- *                     Normal n = <jk>new</jk> Normal();
- *                     n.f1 = <js>"f1"</js>;
- *                     <jk>return</jk> n;
- *             }
- *     }
- *
- *     <jc>// The surrogate class</jc>
- *     <jk>public static class</jk> Surrogate {
- *             <jk>public</jk> String f2;
- *
- *             <jc>// Surrogate constructor</jc>
- *             <jk>public</jk> Surrogate(Normal n) {
- *                     f2 = n.f1;
- *             }
- *
- *             <jc>// Constructor used during parsing (only needed if 
un-transform method specified)</jc>
- *             <jk>public</jk> Surrogate() {}
- *
- *             <jc>// Un-transform method (optional)</jc>
- *             <jk>public static</jk> Normal <jsm>toNormal</jsm>(Surrogate f) {
- *                     Normal n = <jk>new</jk> Normal();
- *                     n.f1 = f.f2;
- *                     <jk>return</jk> n;
- *             }
- *     }
- * </p>
- *
- * <p>
- * It should be noted that a surrogate class is functionally equivalent to the 
following {@link PojoSwap}
- * implementation:
- * <p class='bcode'>
- *     <jk>public static class</jk> SurrogateSwap <jk>extends</jk> 
PojoSwap&lt;Normal,Surrogate&gt; {
- *             <jk>public</jk> Surrogate swap(Normal n) <jk>throws</jk> 
SerializeException {
- *                     <jk>return new</jk> Surrogate(n);
- *             }
- *             <jk>public</jk> Normal unswap(Surrogate s, ClassMeta&lt;?&gt; 
hint) <jk>throws</jk> ParseException {
- *                     <jk>return</jk> Surrogate.<jsm>toNormal</jsm>(s);
- *             }
- *     }
- * </p>
+ * Specialized {@link PojoSwap} for {@link Surrogate} classes.
  *
  * @param <T> The class type that this transform applies to.
  * @param <F> The transformed class type.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package.html
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package.html
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package.html
index 124bc10..9c4be10 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package.html
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/package.html
@@ -114,7 +114,7 @@
                        {@link 
org.apache.juneau.rest.jaxrs.JuneauProvider#beanFilters() 
@JuneauProvider.beanFilters()} / {@link 
org.apache.juneau.rest.jaxrs.JuneauProvider#pojoSwaps() 
@JuneauProvider.pojoSwaps()} - On all serializers and parsers defined on a 
JAX-RS provider.
        </ul>
        <p>
-               Swaps can also be associated with classes through the {@link 
org.apache.juneau.annotation.Pojo#swap @Pojo.swap()} annotation. 
+               Swaps can also be associated with classes through the {@link 
org.apache.juneau.annotation.Swap @Swap} annotation. 
        </p>
                
        <!-- 
========================================================================================================
 -->

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
index 5183c5b..bff57ad 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
@@ -15,8 +15,6 @@ package org.apache.juneau.transforms;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 
 /**
@@ -28,23 +26,15 @@ public class ByteArrayBase64Swap extends StringSwap<byte[]> 
{
         * Converts the specified <code><jk>byte</jk>[]</code> to a {@link 
String}.
         */
        @Override /* PojoSwap */
-       public String swap(BeanSession session, byte[] b) throws 
SerializeException {
-               try {
-                       return base64Encode(b);
-               } catch (Exception e) {
-                       throw new SerializeException(e);
-               }
+       public String swap(BeanSession session, byte[] b) throws Exception {
+               return base64Encode(b);
        }
 
        /**
         * Converts the specified {@link String} to a 
<code><jk>byte</jk>[]</code>.
         */
        @Override /* PojoSwap */
-       public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) 
throws ParseException {
-               try {
-                       return base64Decode(s);
-               } catch (Exception e) {
-                       throw new ParseException(e);
-               }
+       public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) 
throws Exception {
+               return base64Decode(s);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
index daed18c..7da3952 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
@@ -15,7 +15,6 @@ package org.apache.juneau.transforms;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.transform.*;
 
 /**
@@ -36,17 +35,13 @@ public class CalendarLongSwap extends 
PojoSwap<Calendar,Long> {
         */
        @Override /* PojoSwap */
        @SuppressWarnings("unchecked")
-       public Calendar unswap(BeanSession session, Long o, ClassMeta<?> hint) 
throws ParseException {
+       public Calendar unswap(BeanSession session, Long o, ClassMeta<?> hint) 
throws Exception {
                ClassMeta<? extends Calendar> tt;
-               try {
-                       if (hint == null || ! hint.canCreateNewInstance())
-                               hint = 
session.getClassMeta(GregorianCalendar.class);
-                       tt = (ClassMeta<? extends Calendar>)hint;
-                       Calendar c = tt.newInstance();
-                       c.setTimeInMillis(o);
-                       return c;
-               } catch (Exception e) {
-                       throw new ParseException(e);
-               }
+               if (hint == null || ! hint.canCreateNewInstance())
+                       hint = session.getClassMeta(GregorianCalendar.class);
+               tt = (ClassMeta<? extends Calendar>)hint;
+               Calendar c = tt.newInstance();
+               c.setTimeInMillis(o);
+               return c;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
index ec4afe4..bcabe1a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
@@ -15,7 +15,6 @@ package org.apache.juneau.transforms;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.transform.*;
 
 /**
@@ -40,21 +39,17 @@ public class CalendarMapSwap extends PojoSwap<Calendar,Map> 
{
         */
        @Override /* PojoSwap */
        @SuppressWarnings("unchecked")
-       public Calendar unswap(BeanSession session, Map o, ClassMeta<?> hint) 
throws ParseException {
+       public Calendar unswap(BeanSession session, Map o, ClassMeta<?> hint) 
throws Exception {
                ClassMeta<? extends Calendar> tt;
-               try {
-                       if (hint == null || ! hint.canCreateNewInstance())
-                               hint = 
session.getClassMeta(GregorianCalendar.class);
-                       tt = (ClassMeta<? extends Calendar>)hint;
-                       long time = Long.parseLong(o.get("time").toString());
-                       String timeZone = o.get("timeZone").toString();
-                       Date d = new Date(time);
-                       Calendar c = tt.newInstance();
-                       c.setTime(d);
-                       c.setTimeZone(TimeZone.getTimeZone(timeZone));
-                       return c;
-               } catch (Exception e) {
-                       throw new ParseException(e);
-               }
+               if (hint == null || ! hint.canCreateNewInstance())
+                       hint = session.getClassMeta(GregorianCalendar.class);
+               tt = (ClassMeta<? extends Calendar>)hint;
+               long time = Long.parseLong(o.get("time").toString());
+               String timeZone = o.get("timeZone").toString();
+               Date d = new Date(time);
+               Calendar c = tt.newInstance();
+               c.setTime(d);
+               c.setTimeZone(TimeZone.getTimeZone(timeZone));
+               return c;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateLongSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateLongSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateLongSwap.java
index 9316280..27c373f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateLongSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateLongSwap.java
@@ -37,7 +37,7 @@ public class DateLongSwap extends PojoSwap<Date,Long> {
         * Converts the specified {@link Long} to a {@link Date}.
         */
        @Override /* PojoSwap */
-       public Date unswap(BeanSession session, Long o, ClassMeta<?> hint) 
throws ParseException {
+       public Date unswap(BeanSession session, Long o, ClassMeta<?> hint) 
throws Exception {
                Class<?> c = (hint == null ? java.util.Date.class : 
hint.getInnerClass());
                if (c == java.util.Date.class)
                        return new java.util.Date(o);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateMapSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateMapSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateMapSwap.java
index fcaafe0..0893bbb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateMapSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/DateMapSwap.java
@@ -40,7 +40,7 @@ public class DateMapSwap extends PojoSwap<Date,Map> {
         * Converts the specified {@link Map} to a {@link Date}.
         */
        @Override /* PojoSwap */
-       public Date unswap(BeanSession session, Map o, ClassMeta<?> hint) 
throws ParseException {
+       public Date unswap(BeanSession session, Map o, ClassMeta<?> hint) 
throws Exception {
                Class<?> c = (hint == null ? java.util.Date.class : 
hint.getInnerClass());
                long l = Long.parseLong(((Map<?,?>)o).get("time").toString());
                if (c == java.util.Date.class)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
index 9c8a0a1..47a6f51 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
@@ -20,7 +20,6 @@ import org.apache.juneau.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.xml.*;
 
@@ -96,16 +95,9 @@ public class ReaderSwap extends PojoSwap<Reader,Object> {
         * Converts the specified {@link Reader} to an {@link Object} whose 
type is determined by the contents of the reader.
         */
        @Override /* PojoSwap */
-       public Object swap(BeanSession session, Reader o) throws 
SerializeException {
-               try {
-                       if (parser == null)
-                               return read(o);
-                       return parser.parse(o, Object.class);
-               } catch (IOException e) {
-                       return e.getLocalizedMessage();
-               } catch (Exception e) {
-                       throw new SerializeException("ReaderSwap could not 
transform object of type ''{0}''",
-                               o == null ? null : 
o.getClass().getName()).initCause(e);
-               }
+       public Object swap(BeanSession session, Reader o) throws Exception {
+               if (parser == null)
+                       return read(o);
+               return parser.parse(o, Object.class);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
index bb05ab1..29c4900 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/StringFormatSwap.java
@@ -14,8 +14,6 @@ package org.apache.juneau.transforms;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 
 /**
@@ -35,12 +33,12 @@ public class StringFormatSwap extends StringSwap<Object> {
        }
 
        @Override /* PojoSwap */
-       public String swap(BeanSession session, Object o) throws 
SerializeException {
+       public String swap(BeanSession session, Object o) throws Exception {
                return String.format(format, o);
        }
 
        @Override /* PojoSwap */
-       public Object unswap(BeanSession session, String f, ClassMeta<?> hint) 
throws ParseException {
+       public Object unswap(BeanSession session, String f, ClassMeta<?> hint) 
throws Exception {
                return session.convertToType(f, hint);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
index ec0d9dc..446e150 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
@@ -17,8 +17,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 import javax.xml.datatype.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 
 /**
@@ -49,7 +47,7 @@ public class XMLGregorianCalendarSwap extends 
StringSwap<XMLGregorianCalendar> {
         * Converts the specified <code>XMLGregorianCalendar</code> to a {@link 
String}.
         */
        @Override /* PojoSwap */
-       public String swap(BeanSession session, XMLGregorianCalendar b) throws 
SerializeException {
+       public String swap(BeanSession session, XMLGregorianCalendar b) throws 
Exception {
                return b.toXMLFormat();
        }
 
@@ -57,7 +55,7 @@ public class XMLGregorianCalendarSwap extends 
StringSwap<XMLGregorianCalendar> {
         * Converts the specified {@link String} to an 
<code>XMLGregorianCalendar</code>.
         */
        @Override /* PojoSwap */
-       public XMLGregorianCalendar unswap(BeanSession session, String s, 
ClassMeta<?> hint) throws ParseException {
+       public XMLGregorianCalendar unswap(BeanSession session, String s, 
ClassMeta<?> hint) throws Exception {
                if (isEmpty(s))
                        return null;
                return dtf.newXMLGregorianCalendar(s);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-core/juneau-marshall/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/javadoc/overview.html 
b/juneau-core/juneau-marshall/src/main/javadoc/overview.html
index 03fed7b..7f6a0f7 100644
--- a/juneau-core/juneau-marshall/src/main/javadoc/overview.html
+++ b/juneau-core/juneau-marshall/src/main/javadoc/overview.html
@@ -84,7 +84,7 @@
                <li><p><a class='doclink' 
href='#Core.Transforms'>Transforms</a></p>
                <ol>
                        <li><p><a class='doclink' 
href='#Core.PojoSwaps'>PojoSwaps</a></p>
-                       <li><p><a class='doclink' 
href='#Core.PojoAnnotation'>@Pojo annotation</a></p>
+                       <li><p><a class='doclink' 
href='#Core.SwapAnnotation'>@Swap annotation</a></p>
                        <li><p><a class='doclink' href='#Core.SwapMethods'>Swap 
methods</a></p>
                        <li><p><a class='doclink' 
href='#Core.BeanFilters'>BeanFilters and @Bean annotations</a></p>
                        <li><p><a class='doclink' 
href='#Core.SerializingReadersAndInputStreams'>Serializing Readers and 
InputStreams</a></p>
@@ -773,7 +773,7 @@
                </p>
                <ul class='doctree'>
                        <li class='ja'>
-                               {@link org.apache.juneau.annotation.Pojo @Pojo} 
+                               {@link org.apache.juneau.annotation.Swap @Swap} 
                                - Used to tailor how non-bean POJOs get 
interpreted by the framework.
                        <li class='ja'>
                                {@link org.apache.juneau.annotation.Bean @Bean} 
@@ -900,17 +900,17 @@
                </div>
        
                <!-- 
========================================================================================================
 -->
-               <a id="Core.PojoAnnotation"></a>
-               <h4 class='topic' onclick='toggle(this)'>2.6.2 - @Pojo 
annotation</h4>
+               <a id="Core.SwapAnnotation"></a>
+               <h4 class='topic' onclick='toggle(this)'>2.6.2 - @Swap 
annotation</h4>
                <div class='topic'>
                        <p>
-                               {@link org.apache.juneau.annotation.Pojo @Pojo} 
can be used to associate a swap class using an 
+                               {@link org.apache.juneau.annotation.Swap @Swap} 
can be used to associate a swap class using an 
                                annotation.
                                This is often cleaner than using the builder 
<code>pojoSwaps()</code> method since you can keep
                                your swap class near your POJO class. 
                        </p>
                        <p class='bcode'>
-       <ja>@Pojo</ja>(swap=MyPojoSwap.<jk>class</jk>)
+       <ja>@Swap</ja>(MyPojoSwap.<jk>class</jk>)
        <jk>public class</jk> MyPojo {
                ...
        }
@@ -1181,7 +1181,7 @@
                                all other renditions as-is:
                        </p>                    
                        <p class='bcode'>
-       <ja>@Pojo</ja>(swap=MyBeanSwap.<jk>class</jk>)
+       <ja>@Swap</ja>(MyBeanSwap.<jk>class</jk>)
        <jk>public class</jk> MyBean {...}
        
        <jk>public class</jk> MyBeanSwap <jk>extends</jk> 
PojoSwap&lt;MyBean,Object&gt; {
@@ -2090,8 +2090,7 @@
                                </td>
                                <td>
                                        Juneau uses swaps to convert 
non-serializable object to serializable forms:
-                                       <br>{@link 
org.apache.juneau.annotation.BeanProperty#swap() @BeanProperty(swap=...)}
-                                       <br>{@link 
org.apache.juneau.annotation.Pojo#swap() @Pojo(swap=...)}
+                                       <br>{@link 
org.apache.juneau.annotation.Swap @Swap}
                                </td>
                        </tr>
                        <tr>
@@ -6740,7 +6739,7 @@
        
        <h5 class='toc'>What's new in each release</h5>
        <ul class='toc'>
-               <li><p><a class='doclink' href='#6.3.2'>6.3.2 (TBD)</a></p>
+               <li><p><a class='doclink' href='#6.4.0'>6.4.0 (TBD)</a></p>
                <li><p><a class='doclink' href='#6.3.1'>6.3.1 (Aug 1, 
2017)</a></p>
                <li><p><a class='doclink' href='#6.3.0'>6.3.0 (Jun 30, 
2017)</a></p>
                <li><p><a class='doclink' href='#6.2.0'>6.2.0 (Apr 28, 
2017)</a></p>
@@ -6810,8 +6809,8 @@
        </ul>
 
        <!-- 
========================================================================================================
 -->
-       <a id="6.3.2"></a>
-       <h3 class='topic' onclick='toggle(this)'>6.3.2 (TBD)</h3>
+       <a id="6.4.0"></a>
+       <h3 class='topic' onclick='toggle(this)'>6.4.0 (TBD)</h3>
        <div class='topic'>
                <p>
                        The major change in this release is the project 
structure
@@ -6824,8 +6823,8 @@
                                <th>Category</th><th>Maven 
Artifacts</th><th>Description</th><th>Prereqs</th>
                        </tr>
                        <tr class='dark bb'>
-                               <td rowspan="5" 
style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' 
href='#JuneauCore'>Juneau Core</a></td>
-                               <td class='code'><a class='doclink' 
href='#juneau-marshall'>juneau-marshall</a></td>
+                               <td rowspan="5" 
style='text-align:center;font-weight:bold;padding:20px;'>Juneau Core</td>
+                               <td class='code'>juneau-marshall</td>
                                <td>Serializers and parsers for:
                                        <ul style='margin:0px 10px;'>
                                                <li>JSON
@@ -6848,7 +6847,7 @@
                                </td>
                        </tr>
                        <tr class='dark bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
+                               <td class='code'>juneau-marshall-rdf</td>
                                <td>
                                        Serializers and parsers for:
                                        <ul style='margin:0px 10px;'>
@@ -6867,7 +6866,7 @@
                                </td>
                        </tr>
                        <tr class='dark bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-dto'>juneau-dto</a></td>
+                               <td class='code'>juneau-dto</td>
                                <td>
                                        Data Transfer Objects for:
                                        <ul style='margin:0px 10px;'>
@@ -6881,22 +6880,22 @@
                                <td><ul style='margin:0px 10px;'><li>Java 
6</li></ul></td>
                        </tr>
                        <tr class='dark bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-svl'>juneau-svl</a></td>
+                               <td class='code'>juneau-svl</td>
                                <td>
                                        Simple Variable Language API
                                </td>
                                <td><ul style='margin:0px 10px;'><li>Java 
6</li></ul></td>
                        </tr>
                        <tr class='dark bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-config'>juneau-config</a></td>
+                               <td class='code'>juneau-config</td>
                                <td>
                                        Configuration file API
                                </td>
                                <td><ul style='margin:0px 10px;'><li>Java 
6</li></ul></td>
                        </tr>
                        <tr class='light bb'>
-                               <td rowspan="5" 
style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' 
href='#JuneauRest'>Juneau REST</a></td>
-                               <td class='code'><a class='doclink' 
href='#juneau-rest-server'>juneau-rest-server</a></td>
+                               <td rowspan="3" 
style='text-align:center;font-weight:bold;padding:20px;'>Juneau REST</td>
+                               <td class='code'>juneau-rest-server</td>
                                <td>
                                        REST Servlet API
                                </td>
@@ -6908,7 +6907,7 @@
                                </td>
                        </tr>
                        <tr class='light bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
+                               <td class='code'>juneau-rest-server-jaxrs</td>
                                <td>
                                        Optional JAX-RS support
                                </td>
@@ -6920,7 +6919,7 @@
                                </td>
                        </tr>
                        <tr class='light bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-rest-client'>juneau-rest-client</a></td>
+                               <td class='code'>juneau-rest-client</td>
                                <td>
                                        REST Client API
                                </td>
@@ -6931,10 +6930,11 @@
                                        </ul>
                                </td>
                        </tr>
-                       <tr class='light bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-microservice'>juneau-microservice</a></td>
+                       <tr class='dark bb'>
+                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;'>Juneau 
Microservice</td>
+                               <td class='code'>juneau-microservice-server</td>
                                <td>
-                                       REST Microservice API
+                                       REST Microservice Server API
                                </td>
                                <td>
                                        <ul style='margin:0px 10px;'>
@@ -6943,8 +6943,8 @@
                                        </ul>
                                </td>
                        </tr>
-                       <tr class='light bb'>
-                               <td class='code'><a class='doclink' 
href='#juneau-microservice-template'>juneau-microservice-template</a></td>
+                       <tr class='dark bb'>
+                               <td 
class='code'>juneau-microservice-template</td>
                                <td>
                                        Developer template project
                                </td>
@@ -6955,23 +6955,23 @@
                                        </ul>
                                </td>
                        </tr>
-                       <tr class='dark bb'>
-                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' 
href='#Examples'>Examples</a></td>
+                       <tr class='light bb'>
+                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;'>Examples</td>
                                <td 
class='code'><code>juneau-examples-core</code></td>
                                <td>
                                        Core code examples
                                </td>
                                <td></td>
                        </tr>
-                       <tr class='dark bb'>
+                       <tr class='light bb'>
                                <td 
class='code'><code>juneau-examples-rest</code></td>
                                <td>
                                        REST code examples
                                </td>
                                <td></td>
                        </tr>
-                       <tr class='light bb'>
-                               <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;'><a class='doclink' 
href='#JuneauAll'>Juneau All</a></td>
+                       <tr class='dark bb'>
+                               <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;'>Juneau All</td>
                                <td class='code'><code>juneau-all</code></td>
                                <td>
                                        Combination of the following:
@@ -6997,6 +6997,72 @@
                <h6 class='topic'>juneau-marshall</h6>
                <ul class='spaced-list'>
                        <li>
+                               Improvements to swap support.
+                               <ul>
+                                       <li>New {@link 
org.apache.juneau.annotation.Swap @Swap} annotation.
+                                               <br>Replaces the 
<code>@Pojo</code> and <code>@BeanProperty.swap()</code> annotations.
+                                       <li>Support for per-media-type swaps.
+                                               <br>Programmatic example:
+                                               <p class='bcode'>
+       <ja>@Swap</ja>(MyJsonOnlySwap.<jk>class</jk>)                   
+       <jk>public class</jk> MyPojo {}
+
+       <jk>public class</jk> MyJsonOnlySwap <jk>extends</jk> 
PojoSwap&lt;MyPojo,String&gt; {
+
+                       <jk>public</jk> MediaType[] forMediaTypes() {
+                               <jk>return</jk> 
MediaType.<jsm>forStrings</jsm>(<js>"&#42;/json"</js>);
+                       }
+
+                       <jk>public</jk> String swap(BeanSession session, MyPojo 
o) <jk>throws</jk> Exception {
+                               <jk>return</jk> <js>"It's JSON!"</js>;
+               }
+                                               </p>
+                                               <br>Annotated example:
+                                               <p class='bcode'>
+       <ja>@Swap</ja>(impl=ToStringSwap.<jk>class</jk>, 
mediaTypes=<js>"&#42;/json"</js>)
+       <jk>public class</jk> MyBean { ... }
+
+       <jk>public class</jk> ToStringSwap <jk>extends</jk> 
PojoSwap&lt;Object,String&gt; {
+               <jk>public</jk> String swap(BeanSession session, Object o) 
<jk>throws</jk> Exception {
+                       <jk>return</jk> o.toString();
+               }
+       }
+                                               </p>
+                                       <li>Support for templated swaps which 
provide additional context information for a swap.
+                                               <br>The following is an example 
of a templated swap class used to serialize POJOs to HTML using FreeMarker:
+                                               <p class='bcode'>
+       <jc>// Our abstracted templated swap class.</jc>
+       <jk>public abstract class</jk> FreeMarkerSwap <jk>extends</jk> 
PojoSwap&lt;Object,Reader&gt; {
+
+               <jk>public</jk> MediaType[] forMediaTypes() {
+                       <jk>return</jk> 
MediaType.<jsm>forStrings</jsm>(<js>"&#42;/html"</js>);
+               }
+
+               <jk>public</jk> Reader swap(BeanSession session, Object o, 
String template) <jk>throws</jk> Exception {
+                       <jk>return</jk> getFreeMarkerReader(template, o);  
<jc>// Some method that creates raw HTML.</jc>
+               }
+       }
+                                               </p>
+                                               <p class='bcode'>
+               <ja>@Swap</ja>(impl=FreeMarkerSwap.<jk>class</jk>, 
template=<js>"MyPojo.div.ftl"</js>)
+               <jk>public class</jk> MyPojo {}
+                                               </p>
+                                       <li>New {@link 
org.apache.juneau.annotation.Swaps @Swaps} annotation for defining multiple 
swaps
+                                               against the same POJO when 
they're differentiated by media types:
+                                               <p class='bcode'>
+       <ja>@Swaps</ja>(
+               {
+                       <ja>@Swap</ja>(MyJsonSwap.<jk>class</jk>),
+                       <ja>@Swap</ja>(MyXmlSwap.<jk>class</jk>),
+                       <ja>@Swap</ja>(MyOtherSwap.<jk>class</jk>)
+               }
+       )
+       <jk>public class</jk> MyPojo {}
+                                               </p>
+                               </ul>
+                       <li>
+                               New {@link 
org.apache.juneau.transform.Surrogate} interface for identifying surrogate 
classes.
+                       <li>
                                Serializers can now serialize to {@link 
java.util.StringBuilder StringBuilders}.
                        <li>
                                Serializers now serialize the contents of 
{@link java.io.Reader Readers} and {@link java.io.InputStream InputStreams}
@@ -7032,10 +7098,10 @@
        <jc>// Same, but using a session object</jc>
        SerializerSession session = 
JsonSerializer.<jsf>DEFAULT</jsf>.createSession();
        <jk>try</jk> {
-         session.serialize(writer1, pojo1);
-         session.serialize(writer2, pojo2);
+               session.serialize(writer1, pojo1);
+               session.serialize(writer2, pojo2);
        } <jk>finally</jk> {
-         session.close();
+               session.close();
        }                       
                                </p>
                                This is mostly an internal change and doesn't 
affect the existing APIs.
@@ -8472,7 +8538,7 @@
                                        <li>{@link 
org.apache.juneau.BeanPropertyMetaExtended} / {@link 
org.apache.juneau.BeanPropertyMeta#getExtendedMeta(Class)} 
                                </ul>
                        </li>
-                       <li>Renamed <code>@Transform</code> annotation to 
{@link org.apache.juneau.annotation.Pojo @Pojo} so that it can be used for 
various POJO-related behavior, not just associating transforms.  
+                       <li>Renamed <code>@Transform</code> annotation to 
<code><del>@Pojo</del></code> so that it can be used for various POJO-related 
behavior, not just associating transforms.  
                        <li>Introduced {@link org.apache.juneau.dto.swagger 
Swagger DTOs}.
                </ul>           
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/CreatePerson.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/CreatePerson.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/CreatePerson.java
index d064fd7..03cc416 100755
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/CreatePerson.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/CreatePerson.java
@@ -29,7 +29,10 @@ public class CreatePerson {
 
        // Bean properties
        public String name;
-       @BeanProperty(swap=CalendarSwap.DateMedium.class) public Calendar 
birthDate;
+       
+       @Swap(CalendarSwap.DateMedium.class) 
+       public Calendar birthDate;
+       
        public LinkedList<CreateAddress> addresses = new 
LinkedList<CreateAddress>();
 
        /** Bean constructor - Needed for instantiating on server side */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/Person.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/Person.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/Person.java
index e95806a..c298333 100755
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/Person.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/addressbook/Person.java
@@ -31,11 +31,18 @@ public class Person {
        private static int nextPersonId = 1;
 
        // Bean properties
-       @Rdf(beanUri=true) public URI uri;
+       @Rdf(beanUri=true) 
+       public URI uri;
+       
        private URI addressBookUri;
+       
        public int id;
+       
        public String name;
-       @BeanProperty(swap=CalendarSwap.DateMedium.class) public Calendar 
birthDate;
+       
+       @Swap(CalendarSwap.DateMedium.class) 
+       public Calendar birthDate;
+       
        public LinkedList<Address> addresses = new LinkedList<Address>();
 
        /** Bean constructor - Needed for instantiating on server side */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
index 868c205..532b554 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
@@ -137,7 +137,7 @@ public class PetStoreResource extends ResourceJena {
                @BeanProperty(format="$%.2f")  // Renders price in dollars.
                public float price;
 
-               @BeanProperty(swap=DateSwap.ISO8601D.class)  // Renders dates 
in ISO8601 format.
+               @Swap(DateSwap.ISO8601D.class)  // Renders dates in ISO8601 
format.
                public Date birthDate;
 
                public int getAge() {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
index b191358..497a4b1 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
@@ -217,9 +217,17 @@ public class SystemPropertiesResource extends Resource {
        )
        public Form getFormPage() {
                return 
form().method("POST").action("servlet:/formPagePost").children(
-                       h4("Set system property"),
-                       "Name: ", input("text").name("name"), br(),
-                       "Value: ", input("text").name("value"), br(), br(),
+                       table(
+                               tr(
+                                       th("Set system property").colspan(2)
+                               ),
+                               tr(
+                                       td("Name: "), 
td(input("text").name("name"))
+                               ),
+                               tr(
+                                       td("Value: "), 
td(input("text").name("value"))
+                               )
+                       ),
                        button("submit","Click me!").style("float:right")
                );
        }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
index a6d98fe..4d18d87 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
@@ -106,7 +106,7 @@ public class UrlEncodedFormResource extends Resource {
        public static class FormInputBean {
                public String aString;
                public int aNumber;
-               @BeanProperty(swap=CalendarSwap.ISO8601DT.class)
+               @Swap(CalendarSwap.ISO8601DT.class)
                public Calendar aDate;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index ea3dce8..0c0edc4 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -321,7 +321,7 @@ public class DirectoryResource extends Resource {
                /**
                 * @return The file last modified timestamp.
                 */
-               @BeanProperty(swap=DateSwap.ISO8601DTP.class)
+               @Swap(DateSwap.ISO8601DTP.class)
                public Date getLastModified() {
                        return new Date(f.lastModified());
                }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f5f5edfb/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
index 1a813d9..d98b77d 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
@@ -308,7 +308,7 @@ public class LogsResource extends Resource {
                public String type;
                public Object name;
                public Long size;
-               @BeanProperty(swap=DateSwap.DateTimeMedium.class) public Date 
lastModified;
+               @Swap(DateSwap.DateTimeMedium.class) public Date lastModified;
                public URI view, highlighted, parsed, download, delete;
 
                public FileResource(File f, URI uri) throws Exception {


Reply via email to