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; }
