Repository: incubator-juneau
Updated Branches:
  refs/heads/master 3551f4c9c -> 0ccac121d


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index df35f9a..db65a96 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -364,7 +364,7 @@ public class UrlEncodingSerializer extends UonSerializer 
implements PartSerializ
                        Object value = p.getValue();
                        Throwable t = p.getThrown();
                        if (t != null)
-                               session.addBeanGetterWarning(pMeta, t);
+                               session.onBeanGetterException(pMeta, t);
 
                        if (session.canIgnoreValue(cMeta, key, value))
                                continue;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index e7ff61e..5fee28f 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -16,6 +16,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.serializer.*;
 import org.apache.juneau.uon.*;
 
 /**
@@ -266,6 +267,12 @@ public class UrlEncodingSerializerBuilder extends 
UonSerializerBuilder {
                return this;
        }
 
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder listener(Class<? extends 
SerializerListener> value) {
+               super.listener(value);
+               return this;
+       }
+
        @Override /* CoreObjectBuilder */
        public UrlEncodingSerializerBuilder 
beansRequireDefaultConstructor(boolean value) {
                super.beansRequireDefaultConstructor(value);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
index f4a4559..f1d24d2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -282,7 +282,7 @@ public class XmlParser extends ReaderParser {
                                        xmlMeta.getAttrsProperty().add(m, key, 
key, val);
                                } else {
                                        Location l = r.getLocation();
-                                       onUnknownProperty(session, key, m, 
l.getLineNumber(), l.getColumnNumber());
+                                       session.onUnknownProperty(key, m, 
l.getLineNumber(), l.getColumnNumber());
                                }
                        } else {
                                bpm.set(m, key, val);
@@ -361,7 +361,7 @@ public class XmlParser extends ReaderParser {
                                        BeanPropertyMeta pMeta = 
xmlMeta.getPropertyMeta(currAttr);
                                        if (pMeta == null) {
                                                Location loc = r.getLocation();
-                                               onUnknownProperty(session, 
currAttr, m, loc.getLineNumber(), loc.getColumnNumber());
+                                               
session.onUnknownProperty(currAttr, m, loc.getLineNumber(), 
loc.getColumnNumber());
                                                skipCurrentTag(r);
                                        } else {
                                                
session.setCurrentProperty(pMeta);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 2f48757..fcde50e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -237,6 +237,12 @@ public class XmlParserBuilder extends ParserBuilder {
                return this;
        }
 
+       @Override /* ParserBuilder */
+       public XmlParserBuilder listener(Class<? extends ParserListener> value) 
{
+               super.listener(value);
+               return this;
+       }
+
        @Override /* CoreObjectBuilder */
        public XmlParserBuilder beansRequireDefaultConstructor(boolean value) {
                super.beansRequireDefaultConstructor(value);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
index 9e24414..37e7061 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
@@ -16,6 +16,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.serializer.*;
 
 /**
  * Builder class for building instances of XML Schema serializers.
@@ -203,6 +204,12 @@ public class XmlSchemaSerializerBuilder extends 
XmlSerializerBuilder {
                return this;
        }
 
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder listener(Class<? extends 
SerializerListener> value) {
+               super.listener(value);
+               return this;
+       }
+
        @Override /* CoreObjectBuilder */
        public XmlSchemaSerializerBuilder 
beansRequireDefaultConstructor(boolean value) {
                super.beansRequireDefaultConstructor(value);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index af5ce51..4bee6b4 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -637,7 +637,7 @@ public class XmlSerializer extends WriterSerializer {
                                Object value = p.getValue();
                                Throwable t = p.getThrown();
                                if (t != null)
-                                       session.addBeanGetterWarning(pMeta, t);
+                                       session.onBeanGetterException(pMeta, t);
 
                                if (session.canIgnoreValue(cMeta, key, value))
                                        continue;
@@ -654,7 +654,7 @@ public class XmlSerializer extends WriterSerializer {
                                                        Object value2 = 
p2.getValue();
                                                        Throwable t2 = 
p2.getThrown();
                                                        if (t2 != null)
-                                                               
session.addBeanGetterWarning(pMeta, t);
+                                                               
session.onBeanGetterException(pMeta, t);
                                                        out.attr(ns, key2, 
value2);
                                                }
                                        } else /* Map */ {
@@ -697,7 +697,7 @@ public class XmlSerializer extends WriterSerializer {
                                Object value = p.getValue();
                                Throwable t = p.getThrown();
                                if (t != null)
-                                       session.addBeanGetterWarning(pMeta, t);
+                                       session.onBeanGetterException(pMeta, t);
 
                                if (session.canIgnoreValue(cMeta, key, value))
                                        continue;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index 2e812b9..339904b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -350,6 +350,12 @@ public class XmlSerializerBuilder extends 
SerializerBuilder {
                return this;
        }
 
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder listener(Class<? extends 
SerializerListener> value) {
+               super.listener(value);
+               return this;
+       }
+
        @Override /* CoreObjectBuilder */
        public XmlSerializerBuilder beansRequireDefaultConstructor(boolean 
value) {
                super.beansRequireDefaultConstructor(value);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html 
b/juneau-core/src/main/javadoc/overview.html
index 477c103..9488d20 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -6237,6 +6237,21 @@
                        <li><jsf>URLENC_paramFormat</jsf> has been moved to 
{@link org.apache.juneau.uon.UonSerializerContext#UON_paramFormat}, 
                                and the UON/URL-Encoding serializers will now 
always serialize all values as plain text.
                                <br>This means that arrays and maps are 
converted to simple comma-delimited lists.
+                       <li>Listener APIs added to serializers and parsers:
+                               <ul>
+                                       <li>{@link 
org.apache.juneau.serializer.SerializerListener}
+                                       <li>{@link 
org.apache.juneau.serializer.SerializerBuilder#listener(Class)}
+                                       <li>{@link 
org.apache.juneau.rest.annotation.RestResource#serializerListener()}
+                                       <li>{@link 
org.apache.juneau.rest.RestConfig#serializerListener(Class)}
+                                       <li>{@link 
org.apache.juneau.parser.ParserListener}
+                                       <li>{@link 
org.apache.juneau.parser.ParserBuilder#listener(Class)}
+                                       <li>{@link 
org.apache.juneau.rest.annotation.RestResource#parserListener()}
+                                       <li>{@link 
org.apache.juneau.rest.RestConfig#parserListener(Class)}
+                                       <li>{@link 
org.apache.juneau.rest.client.RestClientBuilder#listeners(Class,Class)}
+                               </ul>
+                       <li>The {@link 
org.apache.juneau.BeanContext#BEAN_debug} flag will now capture parser input 
and make it
+                               available through the {@link 
org.apache.juneau.parser.ParserSession#getInputAsString()} method so that it 
can be used
+                               in the listeners.
                </ul>
 
                <h6 class='topic'>org.apache.juneau.rest</h6>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
 
b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 65b4dc8..93e7a3c 100644
--- 
a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ 
b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -1045,6 +1045,21 @@ public class RestClientBuilder extends CoreObjectBuilder 
{
        }
 
        /**
+        * Sets the {@link SerializerContext#SERIALIZER_listener} and {@link 
ParserContext#PARSER_listener} property on all
+        *      serializers and parsers in this group.
+        *
+        * @param sl The new serializer listener.
+        * @param pl The new parser listener.
+        * @return This object (for method chaining).
+        * @see SerializerContext#SERIALIZER_abridged
+        */
+       public RestClientBuilder listeners(Class<? extends SerializerListener> 
sl, Class<? extends ParserListener> pl) {
+               property(SERIALIZER_listener, sl);
+               property(PARSER_listener, pl);
+               return this;
+       }
+
+       /**
         * Sets the {@link ParserContext#PARSER_trimStrings} property on all 
parsers in this group.
         *
         * @param value The new value for this property.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
index 3df4fea..8576e18 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
@@ -86,6 +86,8 @@ public class RestConfig implements ServletConfig {
                beanFilters = new ArrayList<Class<?>>(),
                pojoSwaps = new ArrayList<Class<?>>(),
                paramResolvers = new ArrayList<Class<?>>();
+       Class<? extends SerializerListener> serializerListener;
+       Class<? extends ParserListener> parserListener;
        SerializerGroupBuilder serializers = new SerializerGroupBuilder();
        ParserGroupBuilder parsers = new ParserGroupBuilder();
        EncoderGroupBuilder encoders = new 
EncoderGroupBuilder().append(IdentityEncoder.INSTANCE);
@@ -177,6 +179,8 @@ public class RestConfig implements ServletConfig {
                                addBeanFilters(r.beanFilters());
                                addPojoSwaps(r.pojoSwaps());
                                addParamResolvers(r.paramResolvers());
+                               serializerListener(r.serializerListener());
+                               parserListener(r.parserListener());
                                if (! r.stylesheet().isEmpty())
                                        setStyleSheet(c, r.stylesheet());
                                if (! r.favicon().isEmpty())
@@ -355,6 +359,34 @@ public class RestConfig implements ServletConfig {
        }
 
        /**
+        * Specifies the serializer listener class to use for listening to 
non-fatal serialization errors.
+        * <p>
+        * This is the programmatic equivalent to the {@link 
RestResource#serializerListener() @RestResource.serializerListener()} 
annotation.
+        *
+        * @param listener The listener to add to this config.
+        * @return This object (for method chaining).
+        */
+       public RestConfig serializerListener(Class<? extends 
SerializerListener> listener) {
+               if (listener != SerializerListener.class)
+                       this.serializerListener = listener;
+               return this;
+       }
+
+       /**
+        * Specifies the parser listener class to use for listening to 
non-fatal parse errors.
+        * <p>
+        * This is the programmatic equivalent to the {@link 
RestResource#parserListener() @RestResource.parserListener()} annotation.
+        *
+        * @param listener The listener to add to this config.
+        * @return This object (for method chaining).
+        */
+       public RestConfig parserListener(Class<? extends ParserListener> 
listener) {
+               if (listener != ParserListener.class)
+                       this.parserListener = listener;
+               return this;
+       }
+
+       /**
         * Adds class-level parameter resolvers to this resource.
         * <p>
         * This is the programmatic equivalent to the {@link 
RestResource#paramResolvers() @RestResource.paramResolvers()} annotation.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
index 1fd1523..779a1e4 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -639,8 +639,8 @@ public final class RestContext extends Context {
 
                        
ps.addBeanFilters(beanFilters).addPojoSwaps(pojoSwaps).setProperties(properties);
 
-                       serializers = 
sc.serializers.beanFilters(beanFilters).pojoSwaps(pojoSwaps).properties(properties).build();
-                       parsers = 
sc.parsers.beanFilters(beanFilters).pojoSwaps(pojoSwaps).properties(properties).build();
+                       serializers = 
sc.serializers.beanFilters(beanFilters).pojoSwaps(pojoSwaps).properties(properties).listener(sc.serializerListener).build();
+                       parsers = 
sc.parsers.beanFilters(beanFilters).pojoSwaps(pojoSwaps).properties(properties).listener(sc.parserListener).build();
                        urlEncodingSerializer = new UrlEncodingSerializer(ps);
                        urlEncodingParser = new UrlEncodingParser(ps);
                        encoders = sc.encoders.build();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/0ccac121/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
index 52cfa07..5e86742 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/RestResource.java
@@ -830,4 +830,14 @@ public @interface RestResource {
         * The programmatic equivalent to this annotation are the {@link 
RestConfig#setPageLinks(String)}/{@link RestResponse#setPageLinks(Object)} 
methods.
         */
        String pageLinks() default "";
+
+       /**
+        * Specifies the serializer listener class to use for listening for 
non-fatal errors.
+        */
+       Class<? extends SerializerListener> serializerListener() default 
SerializerListener.class;
+
+       /**
+        * Specifies the parser listener class to use for listening for 
non-fatal errors.
+        */
+       Class<? extends ParserListener> parserListener() default 
ParserListener.class;
 }

Reply via email to