users@jersey.java.net

Re: [Jersey] Setting Request Content Type Dynamically

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Thu, 17 Dec 2009 18:51:24 +0100

Hi,

Your web.xml is incorrect for registering the ResourceConfig
implementation. See:

   https://jersey.dev.java.net/nonav/documentation/latest/user-guide.html
#d4e194

your init param need to be something like:

    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-
value>com.proofpoint.resources.chartsvcs.impl.MyResourceConfig</param-
value>
    </init-param>

where the value of "javax.ws.rs.Application" declares the fully
qualified class name to your implementation of ResourceConfg.

If you want to retain support for package scanning you can inherit
from PackagesResourceConfig [1], for example:

   public class MyResourceConfig extends PackagesResourceConfig {
      public PackagesResourceConfig(Map<String, Object> props) {
          super(props);

          // add more config stuff here
      }
   }

with the following params:

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.proofpoint.resources.chartsvcs.impl</param-
value>
    </init-param>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-
value>com.proofpoint.resources.chartsvcs.impl.MyResourceConfig</param-
value>
    </init-param>


Behavior is fully documented here:

   https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/spi/container/servlet/ServletContainer.html


Alternatively if you are using 1.1.5-ea-SNAPSHOT you can use the
following configuration:

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.proofpoint.resources.chartsvcs.impl</param-
value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.MediaTypeMappings</
param-name>
        <param-value>json : application/json</param-value>
    </init-param>

and you do not require to define your own application class. See:

  https://jersey.dev.java.net/nonav/apidocs/1.1.5-ea-SNAPSHOT/jersey/com/sun/jersey/api/core/ResourceConfig.html
#PROPERTY_MEDIA_TYPE_MAPPINGS

Paul.

[1] https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/core/PackagesResourceConfig.html

On Dec 17, 2009, at 6:36 PM, cgswtsu78 wrote:

>
> Ok thanks, I'll try that. Below is my web.xml
>
> <?xml version="1.0"?>
> <web-app version="2.5"
> xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
> <display-name>Greeter</display-name>
>
> <context-param>
> <param-name>webAppRootKey</param-name>
> <param-value>ChartWebWiz</param-value>
> </context-param>
>
> <context-param>
> <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
> <param-value>server</param-value>
> </context-param>
>
> <context-param>
> <param-name>org.richfaces.SKIN</param-name>
> <param-value>blueSky</param-value>
> </context-param>
>
> <context-param>
> <param-name>org.richfaces.CONTROL_SKINNING</param-name>
> <param-value>enable</param-value>
> </context-param>
>
> <context-param>
> <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
> <param-value>.xhtml</param-value>
> </context-param>
>
> <filter>
> <display-name>RichFaces Filter</display-name>
> <filter-name>richfaces</filter-name>
> <filter-class>org.ajax4jsf.Filter</filter-class>
> </filter>
>
> <filter-mapping>
> <filter-name>richfaces</filter-name>
> <servlet-name>Faces Servlet</servlet-name>
> <dispatcher>REQUEST</dispatcher>
> <dispatcher>FORWARD</dispatcher>
> <dispatcher>INCLUDE</dispatcher>
> </filter-mapping>
>
> <listener>
> <listener-class>com.sun.faces.config.ConfigureListener</listener-
> class>
> </listener>
>
>
> <listener>
> <listener-class>
>
> org
> .eclipse
> .birt.chart.viewer.internal.listener.ChartServletContextListener
> </listener-class>
> </listener>
> <listener>
> <listener-class>
>
> org
> .eclipse.birt.chart.viewer.internal.listener.ChartHttpSessionListener
> </listener-class>
> </listener>
>
> <!-- Faces Servlet -->
> <servlet>
> <servlet-name>Faces Servlet</servlet-name>
> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
>
> <servlet>
> <servlet-name>Jersey Web Application</servlet-name>
>
> <servlet-
> class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-
> class>
> <init-param>
> <param-name>com.sun.jersey.config.property.packages</param-
> name>
> <param-value>com.proofpoint.resources.chartsvcs.impl</param-
> value>
> </init-param>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>Jersey Web Application</servlet-name>
> <url-pattern>/jersey/*</url-pattern>
> </servlet-mapping>
>
> <!-- Faces Servlet Mapping -->
> <servlet-mapping>
> <servlet-name>Faces Servlet</servlet-name>
> <url-pattern>*.xhtml</url-pattern>
> </servlet-mapping>
>
> <login-config>
> <auth-method>BASIC</auth-method>
> </login-config>
> </web-app>
>
> Paul Sandoz wrote:
>>
>>
>> On Dec 17, 2009, at 5:53 PM, cgswtsu78 wrote:
>>
>>>
>>> Paul,
>>>
>>> I just extended the ResourceConfig class from the jersey-server.jar,
>>> do I
>>> have to implement a custom version of it?
>>>
>>
>> I recommend extending from DefaultResourceConfig, as you have to
>> implement less.
>>
>> I want to look at the code and the web.xml to see if there is a
>> mistake. Feel free to send it me privately if appropriate.
>>
>> Paul.
>>
>>
>>>
>>> Paul Sandoz wrote:
>>>>
>>>>
>>>> On Dec 16, 2009, at 9:03 PM, cgswtsu78 wrote:
>>>>
>>>>>
>>>>> Paul,
>>>>>
>>>>> Thanks for the suggestions. I tried them but the GET request
>>>>> didn't
>>>>> find
>>>>> the resource.
>>>>>
>>>>> I extended the ResourceConfig class and added the .json to the end
>>>>> of the
>>>>> GET request.
>>>>>
>>>>
>>>> Can you share your code for the extended ResourceConfig class and
>>>> the
>>>> web.xml?
>>>>
>>>> Paul.
>>>>
>>>>
>>>>
>>>>> when I execute GET /chartsvcs/topspamsenderchart the request
>>>>> succeeds but
>>>>> when I do the below it fails to find it.
>>>>>
>>>>> executed GET /chartsvcs/topspamsenderchart.json
>>>>>
>>>>
>>>>> @Path("/chartsvcs")
>>>>> public class TopSpamSenderWSImpl extends ResourceConfig {
>>>>> {
>>>>>
>>>>> @GET
>>>>> @Path("/topspamsenderchart")
>>>>> @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
>>>>> public Response getTopSpamSenderChartTest1() throws Exception{
>>>>>
>>>>> Object o = call something to populate object...
>>>>>
>>>>> return Response.ok(o).type("application/json").build();
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Samuel Le Berrigaud-3 wrote:
>>>>>>
>>>>>> You might want to use the javax.ws.rs.core.Response class,
>>>>>>
>>>>>> @GET
>>>>>> @Path("/topspamsenderchart")
>>>>>> @Produces({MediaType.APPLICATION_XML,
>>>>>> MediaType.APPLICATION_JSON})
>>>>>> public Response getTest()
>>>>>> {
>>>>>>
>>>>>> Response
>>>>>> .ok(something.fetch).type(calculateContentType()).build();
>>>>>> }
>>>>>>
>>>>>> HTH,
>>>>>> SaM
>>>>>>
>>>>>> On Wed, Dec 16, 2009 at 9:34 AM, cgswtsu78 <cgray_at_proofpoint.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> Does anyone know how I can use a querystring parameter to set
>>>>>>> the
>>>>>>> content
>>>>>>> type of the request.
>>>>>>>
>>>>>>> For example if I have a resource method that accepts both XML
>>>>>>> and
>>>>>>> JSON,
>>>>>>> how
>>>>>>> can I let the consumer (via a url GET request) decide what
>>>>>>> content
>>>>>>> type
>>>>>>> they
>>>>>>> want to be returned? Is there an annotation I can use in
>>>>>>> order to
>>>>>>> map a
>>>>>>> querystring request parameter to dynamically set the requests
>>>>>>> content
>>>>>>> type?
>>>>>>>
>>>>>>>
>>>>>>> @GET
>>>>>>> @Path("/topspamsenderchart")
>>>>>>> @Produces({MediaType.APPLICATION_XML,
>>>>>>> MediaType.APPLICATION_JSON})
>>>>>>> public Object getTest()
>>>>>>> {
>>>>>>>
>>>>>>> Object o = something.fetch;
>>>>>>>
>>>>>>> return o;
>>>>>>> }
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> http://n2.nabble.com/Setting-Request-Content-Type-Dynamically-tp4172634p4172634.html
>>>>>>> Sent from the Jersey mailing list archive at Nabble.com.
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://n2.nabble.com/Setting-Request-Content-Type-Dynamically-tp4172634p4177691.html
>>>>> Sent from the Jersey mailing list archive at Nabble.com.
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://n2.nabble.com/Setting-Request-Content-Type-Dynamically-tp4172634p4182230.html
>>> Sent from the Jersey mailing list archive at Nabble.com.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>>
>
> --
> View this message in context: http://n2.nabble.com/Setting-Request-Content-Type-Dynamically-tp4172634p4182464.html
> Sent from the Jersey mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>