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 267f104023e5b033de5fb59ebfecb455ff9548ea Author: Tatu Saloranta <[email protected]> Date: Thu Feb 6 21:59:53 2014 -0800 Start adding CBOR provider --- {xml => cbor}/pom.xml | 45 +---- .../jackson/jaxrs/cbor/CBOREndpointConfig.java | 50 +++++ .../jackson/jaxrs/cbor/CBORMapperConfigurator.java | 114 +++++++++++ .../jackson/jaxrs/cbor/CBORMediaTypes.java | 9 + .../jackson/jaxrs/cbor/JacksonCBORProvider.java | 220 +++++++++++++++++++++ .../jaxrs/cbor/JacksonJaxbCBORProvider.java | 64 ++++++ .../jackson/jaxrs/cbor/PackageVersion.java.in | 15 ++ .../fasterxml/jackson/jaxrs/cbor/package-info.java | 21 ++ .../services/javax.ws.rs.ext.MessageBodyReader | 2 + .../services/javax.ws.rs.ext.MessageBodyWriter | 1 + pom.xml | 4 +- xml/pom.xml | 2 +- 12 files changed, 509 insertions(+), 38 deletions(-) diff --git a/xml/pom.xml b/cbor/pom.xml similarity index 62% copy from xml/pom.xml copy to cbor/pom.xml index 50c8e23..5111ede 100644 --- a/xml/pom.xml +++ b/cbor/pom.xml @@ -8,17 +8,17 @@ <artifactId>jackson-jaxrs-providers</artifactId> <version>2.3.2-SNAPSHOT</version> </parent> - <artifactId>jackson-jaxrs-xml-provider</artifactId> - <name>Jackson-JAXRS-XML</name> + <artifactId>jackson-jaxrs-cbor-provider</artifactId> + <name>Jackson-JAXRS-CBOR</name> <packaging>bundle</packaging> - <description>Functionality to handle Smile XML input/output for JAX-RS implementations (like Jersey and RESTeasy) using standard Jackson data binding. + <description>Functionality to handle CBOR encoded input/output for JAX-RS implementations (like Jersey and RESTeasy) using standard Jackson data binding. </description> <properties> <!-- Generate PackageVersion.java into this directory. --> - <packageVersion.dir>com/fasterxml/jackson/jaxrs/xml</packageVersion.dir> - <packageVersion.package>${project.groupId}.xml</packageVersion.package> - <osgi.export>${project.groupId}.xml.*;version=${project.version}</osgi.export> + <packageVersion.dir>com/fasterxml/jackson/jaxrs/cbor</packageVersion.dir> + <packageVersion.package>${project.groupId}.cbor</packageVersion.package> + <osgi.export>${project.groupId}.smile.*;version=${project.version}</osgi.export> <!-- NOTE: JAXB annotations module is optional dependency, need to try to mark as such here. --> @@ -33,8 +33,7 @@ ,com.fasterxml.jackson.databind.introspect ,com.fasterxml.jackson.databind.type ,com.fasterxml.jackson.databind.util -,com.fasterxml.jackson.dataformat.xml -,com.fasterxml.jackson.dataformat.xml.jaxb +,com.fasterxml.jackson.dataformat.cbor ,com.fasterxml.jackson.jaxrs.base ,com.fasterxml.jackson.jaxrs.cfg ,com.fasterxml.jackson.module.jaxb;resolution:=optional @@ -61,8 +60,8 @@ </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-xml</artifactId> - <version>${version.jackson.xml}</version> + <artifactId>jackson-dataformat-cbor</artifactId> + <version>${version.jackson.cbor}</version> </dependency> <!-- may also need JAXB annotation support --> <dependency> @@ -70,32 +69,6 @@ <artifactId>jackson-module-jaxb-annotations</artifactId> <version>${version.jackson.jaxb}</version> </dependency> - <!-- JDK 1.6 provides stax-api (javax.xml.stream), but let's add this for documentation --> - <dependency> - <groupId>javax.xml.stream</groupId> - <artifactId>stax-api</artifactId> - <version>1.0-2</version> - <scope>provided</scope> - </dependency> - <!-- But Stax2 API must be included --> - <dependency> - <groupId>org.codehaus.woodstox</groupId> - <artifactId>stax2-api</artifactId> - <!-- Ideally we'd accept range of versions but won't really work with Maven... --> - -<!-- <version>[3.0.4, 3.5.0)</version> --> - <version>3.1.1</version> - </dependency> - - <!-- Also: While JDK-included SJSXP almost works, there are some rough edges; - so let's add full non-test dep to modern Jackson version. - --> - <dependency> - <groupId>org.codehaus.woodstox</groupId> - <artifactId>woodstox-core-asl</artifactId> - <version>4.1.4</version> - </dependency> - </dependencies> <build> <plugins> diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBOREndpointConfig.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBOREndpointConfig.java new file mode 100644 index 0000000..b31f727 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBOREndpointConfig.java @@ -0,0 +1,50 @@ +package com.fasterxml.jackson.jaxrs.cbor; + +import java.lang.annotation.Annotation; + +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.jaxrs.cfg.EndpointConfigBase; + +/** + * Container class for figuring out annotation-based configuration + * for JAX-RS end points. + */ +public class CBOREndpointConfig + extends EndpointConfigBase<CBOREndpointConfig> +{ + /* + /********************************************************** + /* Construction + /********************************************************** + */ + + protected CBOREndpointConfig() { } + + public static CBOREndpointConfig forReading(ObjectReader reader, + Annotation[] annotations) + { + return new CBOREndpointConfig() + .add(annotations, false) + .initReader(reader) + ; + } + + public static CBOREndpointConfig forWriting(ObjectWriter writer, + Annotation[] annotations) + { + CBOREndpointConfig config = new CBOREndpointConfig(); + return config + .add(annotations, true) + .initWriter(writer) + ; + } + + // No need to override, fine as-is: +// protected void addAnnotation(Class<? extends Annotation> type, Annotation annotation, boolean forWriting) + + @Override + public Object modifyBeforeWrite(Object value) { + // nothing to add + return value; + } +} diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMapperConfigurator.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMapperConfigurator.java new file mode 100644 index 0000000..9dfda90 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMapperConfigurator.java @@ -0,0 +1,114 @@ +package com.fasterxml.jackson.jaxrs.cbor; + +import java.util.*; + +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; +import com.fasterxml.jackson.dataformat.cbor.CBORFactory; +import com.fasterxml.jackson.jaxrs.cfg.Annotations; +import com.fasterxml.jackson.jaxrs.cfg.MapperConfiguratorBase; +import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; + +/** + * Helper class used to encapsulate details of configuring an + * {@link ObjectMapper} instance to be used for data binding, as + * well as accessing it. + */ +public class CBORMapperConfigurator + extends MapperConfiguratorBase<CBORMapperConfigurator, ObjectMapper> +{ + /* + /********************************************************** + /* Construction + /********************************************************** + */ + + public CBORMapperConfigurator(ObjectMapper mapper, Annotations[] defAnnotations) + { + super(mapper, defAnnotations); + } + + /** + * Method that locates, configures and returns {@link ObjectMapper} to use + */ + @Override + public synchronized ObjectMapper getConfiguredMapper() { + /* important: should NOT call mapper(); needs to return null + * if no instance has been passed or constructed + */ + return _mapper; + } + + @Override + public synchronized ObjectMapper getDefaultMapper() { + if (_defaultMapper == null) { + _defaultMapper = new ObjectMapper(new CBORFactory()); + _setAnnotations(_defaultMapper, _defaultAnnotationsToUse); + } + return _defaultMapper; + } + + /* + /*********************************************************** + /* Internal methods + /*********************************************************** + */ + + /** + * Helper method that will ensure that there is a configurable non-default + * mapper (constructing an instance if one didn't yet exit), and return + * that mapper. + */ + @Override + protected ObjectMapper mapper() + { + if (_mapper == null) { + _mapper = new ObjectMapper(new CBORFactory()); + _setAnnotations(_mapper, _defaultAnnotationsToUse); + } + return _mapper; + } + + @Override + protected AnnotationIntrospector _resolveIntrospectors(Annotations[] annotationsToUse) + { + // Let's ensure there are no dups there first, filter out nulls + ArrayList<AnnotationIntrospector> intr = new ArrayList<AnnotationIntrospector>(); + for (Annotations a : annotationsToUse) { + if (a != null) { + intr.add(_resolveIntrospector(a)); + } + } + int count = intr.size(); + if (count == 0) { + return AnnotationIntrospector.nopInstance(); + } + AnnotationIntrospector curr = intr.get(0); + for (int i = 1, len = intr.size(); i < len; ++i) { + curr = AnnotationIntrospector.pair(curr, intr.get(i)); + } + return curr; + } + + protected AnnotationIntrospector _resolveIntrospector(Annotations ann) + { + switch (ann) { + case JACKSON: + return new JacksonAnnotationIntrospector(); + case JAXB: + /* For this, need to use indirection just so that error occurs + * when we get here, and not when this class is being loaded + */ + try { + if (_jaxbIntrospectorClass == null) { + _jaxbIntrospectorClass = JaxbAnnotationIntrospector.class; + } + return _jaxbIntrospectorClass.newInstance(); + } catch (Exception e) { + throw new IllegalStateException("Failed to instantiate JaxbAnnotationIntrospector: "+e.getMessage(), e); + } + default: + throw new IllegalStateException(); + } + } +} diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMediaTypes.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMediaTypes.java new file mode 100644 index 0000000..6c43592 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/CBORMediaTypes.java @@ -0,0 +1,9 @@ +package com.fasterxml.jackson.jaxrs.cbor; + +import javax.ws.rs.core.MediaType; + +public class CBORMediaTypes { + // Should be the official one, from CBOR spec + public static final String APPLICATION_JACKSON_CBOR = "application/cbor"; + public static final MediaType APPLICATION_JACKSON_CBOR_TYPE = MediaType.valueOf(APPLICATION_JACKSON_CBOR); +} diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java new file mode 100644 index 0000000..df8b421 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java @@ -0,0 +1,220 @@ +package com.fasterxml.jackson.jaxrs.cbor; + +import java.lang.annotation.Annotation; + +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import javax.ws.rs.ext.*; + +import com.fasterxml.jackson.core.*; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.jaxrs.base.ProviderBase; +import com.fasterxml.jackson.jaxrs.cfg.Annotations; + +/** + * Basic implementation of JAX-RS abstractions ({@link MessageBodyReader}, + * {@link MessageBodyWriter}) needed for binding + * Smile ("application/x-jackson-smile") content to and from Java Objects ("POJO"s). + *<p> + * Actual data binding functionality is implemented by {@link ObjectMapper}: + * mapper to use can be configured in multiple ways: + * <ul> + * <li>By explicitly passing mapper to use in constructor + * <li>By explictly setting mapper to use by {@link #setMapper} + * <li>By defining JAX-RS <code>Provider</code> that returns {@link ObjectMapper}s. + * <li>By doing none of above, in which case a default mapper instance is + * constructed (and configured if configuration methods are called) + * </ul> + * The last method ("do nothing specific") is often good enough; explicit passing + * of Mapper is simple and explicit; and Provider-based method may make sense + * with Depedency Injection frameworks, or if Mapper has to be configured differently + * for different media types. + *<p> + * Note that the default mapper instance will be automatically created if + * one of explicit configuration methods (like {@link #configure}) + * is called: if so, Provider-based introspection is <b>NOT</b> used, but the + * resulting Mapper is used as configured. + *<p> + * Note that there is also a sub-class -- ({@link JacksonJaxbCBORProvider}) -- that + * is configured by default to use both Jackson and JAXB annotations for configuration + * (base class when used as-is defaults to using just Jackson annotations) + * + * @author Tatu Saloranta + */ +@Provider +@Consumes(CBORMediaTypes.APPLICATION_JACKSON_CBOR) +@Produces(CBORMediaTypes.APPLICATION_JACKSON_CBOR) +public class JacksonCBORProvider +extends ProviderBase<JacksonCBORProvider, + ObjectMapper, + CBOREndpointConfig, + CBORMapperConfigurator +> +{ + /** + * Default annotation sets to use, if not explicitly defined during + * construction: only Jackson annotations are used for the base + * class. Sub-classes can use other settings. + */ + public final static Annotations[] BASIC_ANNOTATIONS = { + Annotations.JACKSON + }; + + /* + /********************************************************** + /* Context configuration + /********************************************************** + */ + + /** + * Injectable context object used to locate configured + * instance of {@link ObjectMapper} to use for actual + * serialization. + */ + @Context + protected Providers _providers; + + /* + /********************************************************** + /* Construction + /********************************************************** + */ + + /** + * Default constructor, usually used when provider is automatically + * configured to be used with JAX-RS implementation. + */ + public JacksonCBORProvider() { + this(null, BASIC_ANNOTATIONS); + } + + /** + * @param annotationsToUse Annotation set(s) to use for configuring + * data binding + */ + public JacksonCBORProvider(Annotations... annotationsToUse) + { + this(null, annotationsToUse); + } + + public JacksonCBORProvider(ObjectMapper mapper) + { + this(mapper, BASIC_ANNOTATIONS); + } + + /** + * Constructor to use when a custom mapper (usually components + * like serializer/deserializer factories that have been configured) + * is to be used. + * + * @param annotationsToUse Sets of annotations (Jackson, JAXB) that provider should + * support + */ + public JacksonCBORProvider(ObjectMapper mapper, Annotations[] annotationsToUse) + { + super(new CBORMapperConfigurator(mapper, annotationsToUse)); + } + + /** + * Method that will return version information stored in and read from jar + * that contains this class. + */ + @Override + public Version version() { + return PackageVersion.VERSION; + } + + /* + /********************************************************** + /* Abstract method impls + /********************************************************** + */ + + /** + * @deprecated Since 2.2 use {@link #hasMatchingMediaType(MediaType)} instead + */ + @Deprecated + protected boolean isSmileType(MediaType mediaType) { + return hasMatchingMediaType(mediaType); + } + + /** + * Helper method used to check whether given media type + * is Smile type or sub type. + * Current implementation essentially checks to see whether + * {@link MediaType#getSubtype} returns + * "smile" or something ending with "+smile". + */ + @Override + protected boolean hasMatchingMediaType(MediaType mediaType) + { + /* As suggested by Stephen D, there are 2 ways to check: either + * being as inclusive as possible (if subtype is "smile"), or + * exclusive (major type "application", minor type "smile"). + * Let's start with inclusive one, hard to know which major + * types we should cover aside from "application". + */ + if (mediaType != null) { + // Ok: there are also "xxx+smile" subtypes, which count as well + String subtype = mediaType.getSubtype(); + return CBORMediaTypes.APPLICATION_JACKSON_CBOR_TYPE.getSubtype().equalsIgnoreCase(subtype) || + "cbor".equalsIgnoreCase(subtype) || subtype.endsWith("+cbor"); + } + /* Not sure if this can happen; but it seems reasonable + * that we can at least produce smile without media type? + */ + return true; + } + + /** + * Method called to locate {@link ObjectMapper} to use for serialization + * and deserialization. If an instance has been explicitly defined by + * {@link #setMapper} (or non-null instance passed in constructor), that + * will be used. + * If not, will try to locate it using standard JAX-RS + * {@link ContextResolver} mechanism, if it has been properly configured + * to access it (by JAX-RS runtime). + * Finally, if no mapper is found, will return a default unconfigured + * {@link ObjectMapper} instance (one constructed with default constructor + * and not modified in any way) + * + * @param type Class of object being serialized or deserialized; + * not checked at this point, since it is assumed that unprocessable + * classes have been already weeded out, + * but will be passed to {@link ContextResolver} as is. + * @param mediaType Declared media type for the instance to process: + * not used by this method, + * but will be passed to {@link ContextResolver} as is. + */ + @Override + protected ObjectMapper _locateMapperViaProvider(Class<?> type, MediaType mediaType) + { + if (_providers != null) { + ContextResolver<ObjectMapper> resolver = _providers.getContextResolver(ObjectMapper.class, mediaType); + /* Above should work as is, but due to this bug + * [https://jersey.dev.java.net/issues/show_bug.cgi?id=288] + * in Jersey, it doesn't. But this works until resolution of + * the issue: + */ + if (resolver == null) { + resolver = _providers.getContextResolver(ObjectMapper.class, null); + } + if (resolver != null) { + return resolver.getContext(type); + } + } + return null; + } + + @Override + protected CBOREndpointConfig _configForReading(ObjectReader reader, + Annotation[] annotations) { + return CBOREndpointConfig.forReading(reader, annotations); + } + + @Override + protected CBOREndpointConfig _configForWriting(ObjectWriter writer, + Annotation[] annotations) { + return CBOREndpointConfig.forWriting(writer, annotations); + } +} diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonJaxbCBORProvider.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonJaxbCBORProvider.java new file mode 100644 index 0000000..b207898 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonJaxbCBORProvider.java @@ -0,0 +1,64 @@ +package com.fasterxml.jackson.jaxrs.cbor; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Produces; +import javax.ws.rs.ext.Provider; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.jaxrs.cfg.Annotations; + +/** + * JSON content type provider automatically configured to use both Jackson + * and JAXB annotations (in that order of priority). Otherwise functionally + * same as {@link JacksonCBORProvider}. + *<p> + * Typical usage pattern is to just instantiate instance of this + * provider for JAX-RS and use as is: this will use both Jackson and + * JAXB annotations (with Jackson annotations having priority). + *<p> + * Note: class annotations are duplicated from super class, since it + * is not clear whether JAX-RS implementations are required to + * check settings of super-classes. It is important to keep annotations + * in sync if changed. + */ +@Provider +@Consumes(CBORMediaTypes.APPLICATION_JACKSON_CBOR) +@Produces(CBORMediaTypes.APPLICATION_JACKSON_CBOR) +public class JacksonJaxbCBORProvider extends JacksonCBORProvider { + /** + * Default annotation sets to use, if not explicitly defined during + * construction: use Jackson annotations if found; if not, use + * JAXB annotations as fallback. + */ + public final static Annotations[] DEFAULT_ANNOTATIONS = { + Annotations.JACKSON, Annotations.JAXB + }; + + /** + * Default constructor, usually used when provider is automatically + * configured to be used with JAX-RS implementation. + */ + public JacksonJaxbCBORProvider() + { + this(null, DEFAULT_ANNOTATIONS); + } + + /** + * @param annotationsToUse Annotation set(s) to use for configuring + * data binding + */ + public JacksonJaxbCBORProvider(Annotations... annotationsToUse) + { + this(null, annotationsToUse); + } + + /** + * Constructor to use when a custom mapper (usually components + * like serializer/deserializer factories that have been configured) + * is to be used. + */ + public JacksonJaxbCBORProvider(ObjectMapper mapper, Annotations[] annotationsToUse) + { + super(mapper, annotationsToUse); + } +} \ No newline at end of file diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/PackageVersion.java.in b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/PackageVersion.java.in new file mode 100644 index 0000000..ff04827 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/PackageVersion.java.in @@ -0,0 +1,15 @@ +package @package@; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.core.Versioned; +import com.fasterxml.jackson.core.util.VersionUtil; + +/** + * Automatically generated from PackageVersion.java.in during + * packageVersion-generate execution of maven-replacer-plugin in pom.xml. + */ +public final class PackageVersion implements Versioned { + public final static Version VERSION = VersionUtil.parseVersion("@projectversion@", "@projectgroupid@", "@projectartifactid@"); + + @Override public Version version() { return VERSION; } +} diff --git a/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/package-info.java b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/package-info.java new file mode 100644 index 0000000..b4da5d1 --- /dev/null +++ b/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/package-info.java @@ -0,0 +1,21 @@ +/** + * Jackson-based JAX-RS provider that can automatically + * serialize and deserialize resources for + * Compact Binary Object Representation (CBOR) content type (MediaType). + *<p> + * Also continues supporting functionality, such as + * exception mappers that can simplify handling of + * error conditions. + *<p> + * There are two default provider classes: + *<ul> + * <li>{@link com.fasterxml.jackson.jaxrs.xml.JacksonCBORProvider} is the basic + * provider configured to use Jackson annotations + * </li> + * <li>{@link com.fasterxml.jackson.jaxrs.xml.JacksonJaxbCBORProvider} is extension + * of the basic provider, configured to additionally use JAXB annotations, + * in addition to (or in addition of, if so configured) Jackson annotations. + * </li> + * </ul> + */ +package com.fasterxml.jackson.jaxrs.cbor; diff --git a/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyReader b/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyReader new file mode 100644 index 0000000..8a5b007 --- /dev/null +++ b/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyReader @@ -0,0 +1,2 @@ +com.fasterxml.jackson.jaxrs.cbor.JacksonCBORProvider + diff --git a/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter b/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter new file mode 100644 index 0000000..64aa57d --- /dev/null +++ b/cbor/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter @@ -0,0 +1 @@ +com.fasterxml.jackson.jaxrs.cbor.JacksonCBORProvider diff --git a/pom.xml b/pom.xml index 1e015e2..3725dcf 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ <modules> <module>base</module> + <module>cbor</module> <module>json</module> <module>smile</module> <module>xml</module> @@ -30,9 +31,10 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- core/databind should have same version; data formats, annotations may differ --> - <version.jackson.core>2.3.1</version.jackson.core> + <version.jackson.core>2.3.2-SNAPSHOT</version.jackson.core> <version.jackson.annotations>2.3.0</version.jackson.annotations> + <version.jackson.cbor>${version.jackson.core}</version.jackson.cbor> <version.jackson.smile>${version.jackson.core}</version.jackson.smile> <version.jackson.xml>${version.jackson.core}</version.jackson.xml> diff --git a/xml/pom.xml b/xml/pom.xml index 50c8e23..5b8b289 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -11,7 +11,7 @@ <artifactId>jackson-jaxrs-xml-provider</artifactId> <name>Jackson-JAXRS-XML</name> <packaging>bundle</packaging> - <description>Functionality to handle Smile XML input/output for JAX-RS implementations (like Jersey and RESTeasy) using standard Jackson data binding. + <description>Functionality to handle XML input/output for JAX-RS implementations (like Jersey and RESTeasy) using standard Jackson data binding. </description> <properties> -- 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

