users@jersey.java.net

[Jersey] Error parsing media type for opensearch description document

From: <kafecho_at_gmail.com>
Date: Fri, 3 Feb 2012 13:45:40 +0000 (GMT)

'Hi all,

I am working on a search engine product and porting its rest api from
restlet to jax-rs with Jersey.

One of my resources produces a opensearch description document which
has the mimetype application/opensearchdescription+xml.

As mentionned on the OpenSearch web site, this MIME type is pending
IANA registration.

I've written a custom message body writer (based on Apache Abdera) for
that particular media type and registered the writer as a singleton in
my implementation of javax.ws.rs.core.Application

When I try to HTTP GET to the resource, Jersey fails with the following
exception:

2012-02-03 13:37:11,872 ERROR [main] [/] - unavailable
java.lang.ArrayIndexOutOfBoundsException: 8206
        at
com.sun.jersey.core.header.reader.HttpHeaderReaderImpl.hasNextSeparator
(HttpHeaderReaderImpl.java:153) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.reader.HttpHeaderListAdapter.hasNext(HttpHea
derListAdapter.java:68) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.impl.provider.header.MediaTypeProvider.valueOf(Medi
aTypeProvider.java:96) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.reader.HttpHeaderReader$2.create(HttpHeaderR
eader.java:304) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.reader.HttpHeaderReader$2.create(HttpHeaderR
eader.java:302) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.reader.HttpHeaderReader.readList(HttpHeaderR
eader.java:465) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.reader.HttpHeaderReader.readMediaTypes(HttpH
eaderReader.java:309) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.MediaTypes.createMediaTypes(MediaTypes.java:
224) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.header.MediaTypes.createMediaTypes(MediaTypes.java:
211) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.spi.factory.MessageBodyFactory.initWriters(MessageB
odyFactory.java:213) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.spi.factory.MessageBodyFactory.initWriters(MessageB
odyFactory.java:206) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFact
ory.java:163) ~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(Web
ApplicationImpl.java:1277) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(We
bApplicationImpl.java:169) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebAppli
cationImpl.java:775) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebAppli
cationImpl.java:771) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
~[jersey-core-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebA
pplicationImpl.java:771) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebA
pplicationImpl.java:766) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletC
ontainer.java:488) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebCompon
ent.initiate(ServletContainer.java:318)
~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.jav
a:609) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.jav
a:210) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletConta
iner.java:373) ~[jersey-server-1.9.1.jar:1.9.1]
        at
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletConta
iner.java:556) ~[jersey-server-1.9.1.jar:1.9.1]
        at javax.servlet.GenericServlet.init(GenericServlet.java:241)
~[servlet-api-2.5.jar:2.5]
        at
org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:
440) [jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
[jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50
) [jetty-util-6.1.25.jar:6.1.25]
        at
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java
:685) [jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
[jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:51
7) [jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50
) [jetty-util-6.1.25.jar:6.1.25]
        at
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:13
0) [jetty-6.1.25.jar:6.1.25]
        at org.mortbay.jetty.Server.doStart(Server.java:224)
[jetty-6.1.25.jar:6.1.25]
        at
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50
) [jetty-util-6.1.25.jar:6.1.25]

I am launching the Jersey application as a servlet running inside an
embedded Jetty instance. I am launching Jersey version 1.9.1

Any clues as to why things are failing? Is it because Jersey does not
recognize the MIME type?

Thanks in advance.

Guillaume.

PS:
You can find more about the opensearch media type at the following url:
http://www.opensearch.org/Specifications/OpenSearch/1.1#MIME_type_appli
cation.2Fopensearchdescription.2Bxml