'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