users@jersey.java.net

[Jersey] can't get FEATURE_POJO_MAPPING working (spring, jersey, grizzly)

From: Gonfi den Tschal <gonfidentschal_at_gmail.com>
Date: Wed, 22 Feb 2012 03:40:50 +0200

having troubles getting marshalling to work.

setup:
 - spring
 - jersey
 - grizzly


maven dependencies:

        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-spring</artifactId>
            <version>1.11</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.11</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-grizzly2</artifactId>
            <version>1.11</version>
        </dependency>

starting the server:
            ResourceConfig rc = new DefaultResourceConfig();
            rc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
Boolean.TRUE);
            IoCComponentProviderFactory factory = new
SpringComponentProviderFactory(rc, context);
            try {
                GrizzlyServerFactory.createHttpServer(getBaseUri(),
rc, factory);
            } catch (IOException e) {
                throw new RuntimeException("Failed starting REST web
server!", e);
            }

the service:

@Service
@Path("/ping")
@Produces({"application/json"})
public class PingService {

    @GET @Path("/foo")
    public String foo(@QueryParam("bar") final Bar bar) {
    }

}

sending a type String instead of Bar works fine. as soon as i send
objects i get all kinds of errors.

bar class:

public class Bar {

    private String field1;
    private String field2;

    public String getField1() {
        return field1;
    }
    public void setField1(String field1) {
        this.field1 = field1;
    }

    public String getField2() {
        return field2;
    }
    public void setField2(String field2) {
        this.field2 = field2;
    }
}

with this setup, when starting the server, i get:

  SEVERE: Missing dependency for method public java.lang.String
mypackage.PingService.foo(mypackage.Bar) at parameter at index 0
  SEVERE: Method, public java.lang.String
mypackage.PingService.foo(mypackage.Bar), annotated with GET of
resource, class mypackage.PingService, is not recognized as valid
resource method.


if i annotate the Bar class with @XmlRootElement (which i don't want,
because i cannot touch the classes i would need to transfer) then the
server starts, but calling the method results in a 404 even though the
get request looks fine.

most examples out there just use strings as inputs.

been trying for hours, giving up. any idea what else i should check or
try or read?