This is an automated email from the git hooks/post-receive script. tjaalton pushed a commit to branch master in repository jackson-jaxrs-providers.
commit bafb6fb64bc15482c7bfc56784169204d6c4b1f2 Author: Tatu Saloranta <[email protected]> Date: Wed Oct 9 23:15:46 2013 -0700 Initial step for #32. Although just now realized it's wrong... will need to rework --- .../fasterxml/jackson/jaxrs/base/ProviderBase.java | 60 ++++++++++++++++++--- .../jackson/jaxrs/cfg/EndpointConfigBase.java | 61 ++++++---------------- .../fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java | 2 +- .../jackson/jaxrs/cfg/ObjectReaderInjector.java | 44 ++++++++++++++++ .../jackson/jaxrs/cfg/ObjectWriterInjector.java | 44 ++++++++++++++++ .../jackson/jaxrs/util/EndpointAsBeanProperty.java | 7 +-- .../jackson/jaxrs/json/JacksonJsonProvider.java | 12 ++--- .../jackson/jaxrs/json/JsonEndpointConfig.java | 12 ++--- .../jaxrs/json/annotation/JacksonFeatures.java | 2 +- .../jackson/jaxrs/smile/JacksonSmileProvider.java | 12 ++--- .../jackson/jaxrs/smile/SmileEndpointConfig.java | 16 +++--- .../jaxrs/smile/annotation/JacksonFeatures.java | 2 +- .../jackson/jaxrs/xml/JacksonXMLProvider.java | 12 ++--- .../jackson/jaxrs/xml/XMLEndpointConfig.java | 12 ++--- .../jaxrs/xml/annotation/JacksonFeatures.java | 2 +- 15 files changed, 204 insertions(+), 96 deletions(-) diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java index 03930f8..ee8131d 100644 --- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java @@ -75,7 +75,7 @@ public abstract class ProviderBase< * (never try to serialize instances of these types). */ public final static Class<?>[] DEFAULT_UNWRITABLES = new Class<?>[] { - InputStream.class, // as per [Issue#19] + InputStream.class, // as per [Issue#19] OutputStream.class, Writer.class, StreamingOutput.class, Response.class }; @@ -112,7 +112,7 @@ public abstract class ProviderBase< /** * Feature flags set. * - * @since 2.3.0 + * @since 2.3 */ protected int _jaxRSFeatures; @@ -125,6 +125,20 @@ public abstract class ProviderBase< * View to use for writing if none defined for the end point. */ protected Class<?> _defaultWriteView; + + /** + * Object used for handling possible {@link ObjectReader} injection. + * + * @since 2.3 + */ + protected ObjectReaderInjector _readerInjector; + + /** + * Object used for handling possible {@link ObjectWriter} injection. + * + * @since 2.3 + */ + protected ObjectWriterInjector _writerInjector; /* /********************************************************** @@ -176,6 +190,8 @@ public abstract class ProviderBase< protected ProviderBase(MAPPER_CONFIG mconfig) { _mapperConfig = mconfig; + _readerInjector = new ObjectReaderInjector(); + _writerInjector = new ObjectWriterInjector(); } /** @@ -446,11 +462,43 @@ public abstract class ProviderBase< protected abstract MAPPER _locateMapperViaProvider(Class<?> type, MediaType mediaType); - protected abstract EP_CONFIG _configForReading(MAPPER mapper, - Annotation[] annotations, Class<?> defaultView); + protected EP_CONFIG _configForReading(MAPPER mapper, + Annotation[] annotations, Class<?> defaultView) + { + ObjectReader r = _readerInjector.getAndClear(); + if (r == null) { + if (defaultView != null) { + r = mapper.readerWithView(defaultView); + } else { + r = mapper.reader(); + } + } else { + r = r.withView(defaultView); + } + return _configForReading(r, annotations); + } + + protected EP_CONFIG _configForWriting(MAPPER mapper, + Annotation[] annotations, Class<?> defaultView) + { + ObjectWriter w = _writerInjector.getAndClear(); + if (w == null) { + if (defaultView != null) { + w = mapper.writerWithView(defaultView); + } else { + w = mapper.writer(); + } + } else { + w = w.withView(defaultView); + } + return _configForWriting(w, annotations); + } + + protected abstract EP_CONFIG _configForReading(ObjectReader reader, + Annotation[] annotations); - protected abstract EP_CONFIG _configForWriting(MAPPER mapper, - Annotation[] annotations, Class<?> defaultView); + protected abstract EP_CONFIG _configForWriting(ObjectWriter writer, + Annotation[] annotations); /* /********************************************************** diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/EndpointConfigBase.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/EndpointConfigBase.java index 465ca85..f698939 100644 --- a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/EndpointConfigBase.java +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/EndpointConfigBase.java @@ -5,9 +5,9 @@ import java.lang.annotation.Annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; + import com.fasterxml.jackson.databind.*; + import com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures; /** @@ -84,72 +84,43 @@ public abstract class EndpointConfigBase<THIS extends EndpointConfigBase<THIS>> } } - /** - * @deprecated Since 2.3 - */ - @Deprecated - protected THIS initReader(ObjectMapper mapper) { - return initReader(mapper, null); - } - @SuppressWarnings("unchecked") - protected THIS initReader(ObjectMapper mapper, Class<?> defaultView) + protected THIS initReader(ObjectReader reader) { - // first common config - Class<?> view = _activeView; - if (view == null) { - view = defaultView; - } - if (view != null) { - _reader = mapper.readerWithView(view); - } else { - _reader = mapper.reader(); + if (_activeView != null) { + reader = reader.withView(_activeView); } - if (_rootName != null) { - _reader = _reader.withRootName(_rootName); + reader = reader.withRootName(_rootName); } // Then deser features if (_deserEnable != null) { - _reader = _reader.withFeatures(_deserEnable); + reader = reader.withFeatures(_deserEnable); } if (_deserDisable != null) { - _reader = _reader.withoutFeatures(_deserDisable); + reader = reader.withoutFeatures(_deserDisable); } + _reader = reader; return (THIS) this; } - - /** - * @deprecated Since 2.3 - */ - @Deprecated - protected THIS initWriter(ObjectMapper mapper) { - return initWriter(mapper, null); - } @SuppressWarnings("unchecked") - protected THIS initWriter(ObjectMapper mapper, Class<?> defaultView) + protected THIS initWriter(ObjectWriter writer) { - // first common config - Class<?> view = _activeView; - if (view == null) { - view = defaultView; - } - if (view != null) { - _writer = mapper.writerWithView(view); - } else { - _writer = mapper.writer(); + if (_activeView != null) { + writer = writer.withView(_activeView); } if (_rootName != null) { - _writer = _writer.withRootName(_rootName); + writer = writer.withRootName(_rootName); } // Then features if (_serEnable != null) { - _writer = _writer.withFeatures(_serEnable); + writer = writer.withFeatures(_serEnable); } if (_serDisable != null) { - _writer = _writer.withoutFeatures(_serDisable); + writer = writer.withoutFeatures(_serDisable); } + _writer = writer; return (THIS) this; } diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java index 669b4e9..9e415fb 100644 --- a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java @@ -30,7 +30,7 @@ public enum JaxRSFeature implements ConfigFeature /* Other /****************************************************** */ - + ; private final boolean _defaultState; diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectReaderInjector.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectReaderInjector.java new file mode 100644 index 0000000..4bbbb75 --- /dev/null +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectReaderInjector.java @@ -0,0 +1,44 @@ +package com.fasterxml.jackson.jaxrs.cfg; + +import java.util.concurrent.atomic.AtomicBoolean; + +import com.fasterxml.jackson.databind.*; + +/** + * Based on ideas from [Issue#32], this class allows "overriding" of {@link ObjectReader} + * that JAX-RS Resource will use; usually this is done from a Servlet or JAX-RS filter + * before execution reaches resource. + * + * @author apemberton@github, Tatu Saloranta + * + * @since 2.3 + */ +public class ObjectReaderInjector +{ + protected static final ThreadLocal<ObjectReader> _threadLocal = new ThreadLocal<ObjectReader>(); + + /** + * Simple marker used to optimize out {@link ThreadLocal} access in cases + * where this feature is not being used + */ + protected final AtomicBoolean _hasBeenSet = new AtomicBoolean(false); + + public ObjectReaderInjector() { } + + public void set(ObjectReader r) { + _hasBeenSet.set(true); + _threadLocal.set(r); + } + + public ObjectReader get() { + return _hasBeenSet.get() ? _threadLocal.get() : null; + } + + public ObjectReader getAndClear() { + ObjectReader r = get(); + if (r != null) { + _threadLocal.remove(); + } + return r; + } +} diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectWriterInjector.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectWriterInjector.java new file mode 100644 index 0000000..8113aac --- /dev/null +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/ObjectWriterInjector.java @@ -0,0 +1,44 @@ +package com.fasterxml.jackson.jaxrs.cfg; + +import java.util.concurrent.atomic.AtomicBoolean; + +import com.fasterxml.jackson.databind.*; + +/** + * Based on ideas from [Issue#32], this class allows "overriding" of {@link ObjectWriter} + * that JAX-RS Resource will use; usually this is done from a Servlet or JAX-RS filter + * before execution reaches resource. + * + * @author apemberton@github, Tatu Saloranta + * + * @since 2.3 + */ +public class ObjectWriterInjector +{ + protected static final ThreadLocal<ObjectWriter> _threadLocal = new ThreadLocal<ObjectWriter>(); + + /** + * Simple marker used to optimize out {@link ThreadLocal} access in cases + * where this feature is not being used + */ + protected final AtomicBoolean _hasBeenSet = new AtomicBoolean(false); + + public ObjectWriterInjector() { } + + public void set(ObjectWriter r) { + _hasBeenSet.set(true); + _threadLocal.set(r); + } + + public ObjectWriter get() { + return _hasBeenSet.get() ? _threadLocal.get() : null; + } + + public ObjectWriter getAndClear() { + ObjectWriter w = get(); + if (w != null) { + _threadLocal.remove(); + } + return w; + } +} diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/util/EndpointAsBeanProperty.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/util/EndpointAsBeanProperty.java index 530809b..0780f72 100644 --- a/base/src/main/java/com/fasterxml/jackson/jaxrs/util/EndpointAsBeanProperty.java +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/util/EndpointAsBeanProperty.java @@ -4,6 +4,8 @@ import java.lang.annotation.Annotation; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.PropertyMetadata; +import com.fasterxml.jackson.databind.PropertyName; import com.fasterxml.jackson.databind.introspect.AnnotationMap; /** @@ -17,7 +19,7 @@ import com.fasterxml.jackson.databind.introspect.AnnotationMap; public class EndpointAsBeanProperty extends BeanProperty.Std { - public final static String ENDPOINT_NAME = "JAX-RS/endpoint"; + public final static PropertyName ENDPOINT_NAME = new PropertyName("JAX-RS/endpoint"); private final static AnnotationMap NO_ANNOTATIONS = new AnnotationMap(); @@ -27,8 +29,7 @@ public class EndpointAsBeanProperty { // TODO: find and pass wrapper; isRequired marker? super(ENDPOINT_NAME, type, /*PropertyName wrapperName*/ null, - null, null, - /* isRequired */ false); + null, null, PropertyMetadata.STD_OPTIONAL); boolean hasAnn = (annotations != null && annotations.length > 0); if (hasAnn) { _annotations = new AnnotationMap(); diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java index 4724d30..933ec1a 100644 --- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java +++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java @@ -217,15 +217,15 @@ public class JacksonJsonProvider } @Override - protected JsonEndpointConfig _configForReading(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return JsonEndpointConfig.forReading(mapper, annotations, defaultView); + protected JsonEndpointConfig _configForReading(ObjectReader reader, + Annotation[] annotations) { + return JsonEndpointConfig.forReading(reader, annotations); } @Override - protected JsonEndpointConfig _configForWriting(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return JsonEndpointConfig.forWriting(mapper, annotations, defaultView, + protected JsonEndpointConfig _configForWriting(ObjectWriter writer, + Annotation[] annotations) { + return JsonEndpointConfig.forWriting(writer, annotations, _jsonpFunctionName); } } diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java index 8a000de..61fbc4e 100644 --- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java +++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java @@ -28,16 +28,16 @@ public class JsonEndpointConfig protected JsonEndpointConfig() { } - public static JsonEndpointConfig forReading(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) + public static JsonEndpointConfig forReading(ObjectReader reader, + Annotation[] annotations) { return new JsonEndpointConfig() .add(annotations, false) - .initReader(mapper, defaultView); + .initReader(reader); } - public static JsonEndpointConfig forWriting(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView, + public static JsonEndpointConfig forWriting(ObjectWriter writer, + Annotation[] annotations, String defaultJsonpMethod) { JsonEndpointConfig config = new JsonEndpointConfig(); @@ -46,7 +46,7 @@ public class JsonEndpointConfig } return config .add(annotations, true) - .initWriter(mapper, defaultView) + .initWriter(writer) ; } diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/annotation/JacksonFeatures.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/annotation/JacksonFeatures.java index a7216f6..f801397 100644 --- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/annotation/JacksonFeatures.java +++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/annotation/JacksonFeatures.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; * Annotation that can be used enable and/or disable various * features for <code>ObjectReader</code>s and <code>ObjectWriter</code>s. * - * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonAnnotation} instead + * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures} instead */ @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java index 68e82a9..76138b7 100644 --- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java +++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java @@ -207,14 +207,14 @@ extends ProviderBase<JacksonSmileProvider, } @Override - protected SmileEndpointConfig _configForReading(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return SmileEndpointConfig.forReading(mapper, annotations, defaultView); + protected SmileEndpointConfig _configForReading(ObjectReader reader, + Annotation[] annotations) { + return SmileEndpointConfig.forReading(reader, annotations); } @Override - protected SmileEndpointConfig _configForWriting(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return SmileEndpointConfig.forWriting(mapper, annotations, defaultView); + protected SmileEndpointConfig _configForWriting(ObjectWriter writer, + Annotation[] annotations) { + return SmileEndpointConfig.forWriting(writer, annotations); } } diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java index 9688fac..6e52811 100644 --- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java +++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java @@ -20,23 +20,23 @@ public class SmileEndpointConfig protected SmileEndpointConfig() { } - public static SmileEndpointConfig forReading(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) + public static SmileEndpointConfig forReading(ObjectReader reader, + Annotation[] annotations) { return new SmileEndpointConfig() .add(annotations, false) - .initReader(mapper, defaultView) - ; + .initReader(reader) + ; } - public static SmileEndpointConfig forWriting(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) + public static SmileEndpointConfig forWriting(ObjectWriter writer, + Annotation[] annotations) { SmileEndpointConfig config = new SmileEndpointConfig(); return config .add(annotations, true) - .initWriter(mapper, defaultView) - ; + .initWriter(writer) + ; } @SuppressWarnings("deprecation") diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/annotation/JacksonFeatures.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/annotation/JacksonFeatures.java index 6c5ce6d..30e5acd 100644 --- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/annotation/JacksonFeatures.java +++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/annotation/JacksonFeatures.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; * Annotation that can be used enable and/or disable various * features for <code>ObjectReader</code>s and <code>ObjectWriter</code>s. * - * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonAnnotation} instead + * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures} instead */ @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java index fdcc637..71aed35 100644 --- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java +++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java @@ -132,15 +132,15 @@ public class JacksonXMLProvider */ @Override - protected XMLEndpointConfig _configForReading(XmlMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return XMLEndpointConfig.forReading(mapper, annotations, defaultView); + protected XMLEndpointConfig _configForReading(ObjectReader reader, + Annotation[] annotations) { + return XMLEndpointConfig.forReading(reader, annotations); } @Override - protected XMLEndpointConfig _configForWriting(XmlMapper mapper, - Annotation[] annotations, Class<?> defaultView) { - return XMLEndpointConfig.forWriting(mapper, annotations, defaultView); + protected XMLEndpointConfig _configForWriting(ObjectWriter writer, + Annotation[] annotations) { + return XMLEndpointConfig.forWriting(writer, annotations); } /** diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java index f00e380..d29803b 100644 --- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java +++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java @@ -21,21 +21,21 @@ public class XMLEndpointConfig protected XMLEndpointConfig() { } - public static XMLEndpointConfig forReading(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) + public static XMLEndpointConfig forReading(ObjectReader reader, + Annotation[] annotations) { return new XMLEndpointConfig() .add(annotations, false) - .initReader(mapper, defaultView); + .initReader(reader); } - public static XMLEndpointConfig forWriting(ObjectMapper mapper, - Annotation[] annotations, Class<?> defaultView) + public static XMLEndpointConfig forWriting(ObjectWriter writer, + Annotation[] annotations) { XMLEndpointConfig config = new XMLEndpointConfig(); return config .add(annotations, true) - .initWriter(mapper, defaultView) + .initWriter(writer) ; } diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/annotation/JacksonFeatures.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/annotation/JacksonFeatures.java index a3834fe..f1fb5c7 100644 --- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/annotation/JacksonFeatures.java +++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/annotation/JacksonFeatures.java @@ -12,7 +12,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; * Annotation that can be used enable and/or disable various * features for <code>ObjectReader</code>s and <code>ObjectWriter</code>s. * - * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonAnnotation} instead + * @deprecated Since 2.2, use shared {@link com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures} instead */ @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jackson-jaxrs-providers.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

