users@jersey.java.net

RE: [Jersey] Problem with suffixes mapping to media types

From: Rabick, Mark A (IS) <"Rabick,>
Date: Tue, 25 Aug 2009 14:12:17 -0500

Paul, thanks for the reply on the conneg filter stuff but I was
wondering if you had any ideas why only 2 of my 3 suffixes are being
mapped to the appropriate media type?

 

-mark

 

_______________________________________________
Mark A. Rabick - Software Engineer
Em: mark.rabick_at_ngc.com

From: Rabick, Mark A (IS) [mailto:Mark.Rabick_at_ngc.com]
Sent: Thursday, August 20, 2009 1:22 PM
To: users_at_jersey.dev.java.net
Subject: RE: [Jersey] Problem with suffixes mapping to media types

 

Any ideas

I have mapped 3 suffixes to media types for content type negotiation and
only 2 of the 3 are working. The resource is:

@ImplicitProduces({CnodbMediaType.APPLICATION_RDF_XML,MediaType.APPLICAT
ION_XML})

@Singleton

@Path("v1/ontology")

public class OntologyResource extends BaseResource {

        private byte[] rdfRepresentation;

        private byte[] ntripleRepresentation;

        private byte[] n3Representation;

        

        private @javax.ws.rs.core.Context HttpHeaders httpHeaders;

        /**

         * No-argument Constructor.

         * @throws Exception

         * @throws NamingException

         */

        public OntologyResource() throws NamingException, Exception {

                rdfRepresentation = null;

                ntripleRepresentation = null;

                javax.naming.Context context = new InitialContext();

                new CnodbModelDb(context);

        }

        /**

         * Retrieve an RDF representation of the current CNODB ontology
with optional

         * instance data..

         * @param getInstanceData If true, return the instance
data as well.

         * @param ignoreCache If true, query ontology from
database, not the stored version.

         *

         * @response.representation.200.mediaType application/rdf+xml

         * @response.representation.200.doc This is the representation
returned by default.

         *

         * @return A response containing the ontology and instance
data if requested.

         */

        @GET //_at_Path("rdf")

        @Produces(CnodbMediaType.APPLICATION_RDF_XML)

        public synchronized Response getRDF(

                        @QueryParam("ind") @DefaultValue("false")
Boolean getInstanceData,

                        @QueryParam("ignoreCache")
@DefaultValue("false") Boolean ignoreCache)

        {

                System.out.println("getRDF - getInstanceData=" +
getInstanceData + " ignoreCache=" + ignoreCache);

                // commented out for brevity

        }

        @GET

        @Produces(CnodbMediaType.TEXT_NTRIPLE)

        public synchronized Response getNTRIPLE(

                        @QueryParam("ind") @DefaultValue("false")
Boolean getInstanceData,

                        @QueryParam("ignoreCache")
@DefaultValue("false") Boolean ignoreCache)

        {

                System.out.println("getNTRIPLE - getInstanceData=" +
getInstanceData + " ignoreCache=" + ignoreCache);

                System.out.println("httpHeaders acceptable media types:
" + httpHeaders.getAcceptableMediaTypes());

                // commented out for brevity

        }

        

        @GET

        @Produces(CnodbMediaType.TEXT_N3)

        public synchronized Response getN3(

                        @QueryParam("ind") @DefaultValue("false")
Boolean getInstanceData,

                        @QueryParam("ignoreCache")
@DefaultValue("false") Boolean ignoreCache)

        {

                System.out.println("getN3 - getInstanceData=" +
getInstanceData + " ignoreCache=" + ignoreCache);

                // commented out for brevity

        }

}

The CnodbMediaType-s are from this file:

public class CnodbMediaType {

        

        public static final String TEXT_N3 = "text/n3";

        public static final MediaType TEXT_N3_TYPE = new
MediaType("text","n3");

        public final static String APPLICATION_RDF_XML =
"application/rdf+xml";

        public final static MediaType APPLICATION_RDF_XML_TYPE = new
MediaType("application","rdf+xml");

        public static final String TEXT_NTRIPLE = "text/ntriple";

        public static final MediaType TEXT_NTRIPLE_TYPE = new
MediaType("text","ntriple");

}

My Package resource configuration file is mapping the extension "rdf" to
application/rdf+xml, "nt" to text/ntriple and "n3" to text/n3 as
follows:

public class CnodbRestResourceConfig extends PackagesResourceConfig {

        /**

         * This constructor defines the root package for the Jersey
runtime

         * to use to find resource end-points.

         */

        public CnodbRestResourceConfig() {

                super("mil.cnodb.rs");

        }

        

        /**

         * This method returns the current media type mappings that
translate a

         * file extension on a URI into a desired {_at_link MediaType}.

         * @return The mappings from extension to media
type.

         *

         * @see
com.sun.jersey.api.core.DefaultResourceConfig#getMediaTypeMappings()

         */

        @Override

        public Map<String, MediaType> getMediaTypeMappings() {

        Map<String, MediaType> m = new HashMap<String, MediaType>();

        m.put("xml", MediaType.APPLICATION_XML_TYPE);

        m.put("json", MediaType.APPLICATION_JSON_TYPE);

        m.put("html", MediaType.TEXT_HTML_TYPE);

        m.put("n3", CnodbMediaType.TEXT_N3_TYPE);

        m.put("rdf", CnodbMediaType.APPLICATION_RDF_XML_TYPE);

        m.put("nt", CnodbMediaType.TEXT_NTRIPLE_TYPE);

        return m;

    }

}

If I specify a URL: http://localhost:7001/cnodb/rest/v1/ontology.rdf
<http://localhost:7001/cnodb/rest/v1/ontology.rdf> or
http://localhost:7001/cnodb/rest/v1/ontology.n3
<http://localhost:7001/cnodb/rest/v1/ontology.n3> the appropriate
resource methods are called but if I specify
http://localhost:7001/cnodb/rest/v1/ontology.nt
<http://localhost:7001/cnodb/rest/v1/ontology.nt> , I don't get a
response and the resource method getNTRIPLE(...) doea not appear to get
called. Is there a way I can intercept the HTTP request to view the
'accept' header and see if in fact the .nt suffix is being mapped
properly?

--mark

_______________________________________________
Mark A. Rabick
Software Engineer
Northrop Grumman - Integrated Mission Systems (IS/DSD/IMS)
3200 Samson Way
Bellevue, NE 68123
Em: mark.rabick_at_ngc.com
Remember PFC Ross A. McGinnis...
  http://www.army.mil/medalofhonor/McGinnis/index.html
<http://www.army.mil/medalofhonor/McGinnis/index.html>
... MA2 Michael A. Monsoor, Lt. Michael P. Murphy, Cpl. Jason Dunham,
SFC Paul Ray Smith and the rest...
  http://www.cmohs.org/recipients/most_recent.htm
<http://www.cmohs.org/recipients/most_recent.htm>