Question

I have a Spring Jersey app and Hibernate at DAO tier. Because some facilities of MOXy offers for One Model Approach (read an answer of Blaise Doughan JAXb, Hibernate and beans). I use MOXy instead of JAXB which shipped with Jersey. But when I add moxy dependency to pom.xml, the REST request couldn't be handled. Weblogic complains:

java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

This is a part of my pom.xml

 <!--Jersey-->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-impl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.8</version>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.9</version>
        <exclusions>
            <exclusion>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

My dependency tree

[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-context:jar:4.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:4.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-beans:jar:4.0.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:4.0.0.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:4.0.0.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-orm:jar:4.0.0.RELEASE:compile
[INFO] |  +- org.springframework:spring-jdbc:jar:4.0.0.RELEASE:compile
[INFO] |  \- org.springframework:spring-tx:jar:4.0.0.RELEASE:compile
[INFO] +- com.sun.jersey.contribs:jersey-spring:jar:1.9:compile
[INFO] +- com.oracle:ojdbc6:jar:11.2.0.3:compile
[INFO] +- org.hibernate:hibernate-core:jar:3.6.7.Final:compile
[INFO] |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile
[INFO] |  +- javax.transaction:jta:jar:1.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] +- javassist:javassist:jar:3.12.1.GA:compile
[INFO] +- org.glassfish.jersey.media:jersey-media-moxy:jar:2.8:compile
[INFO] |  +- org.glassfish.jersey.core:jersey-common:jar:2.8:compile
[INFO] |  |  +- javax.ws.rs:javax.ws.rs-api:jar:2.0:compile
[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] |  |  +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.8:compile
[INFO] |  |  +- org.glassfish.hk2:hk2-api:jar:2.2.0:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-utils:jar:2.2.0:compile
[INFO] |  |  |  \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.2.0:compile
[INFO] |  |  +- org.glassfish.hk2.external:javax.inject:jar:2.2.0:compile
[INFO] |  |  +- org.glassfish.hk2:hk2-locator:jar:2.2.0:compile
[INFO] |  |  |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] |  |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] |  +- org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.8:compile
[INFO] |  +- org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.5.0:compile
[INFO] |  |  \- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.5.0:compile
[INFO] |  |     \- org.eclipse.persistence:org.eclipse.persistence.asm:jar:2.5.0:compile
[INFO] |  \- org.eclipse.persistence:org.eclipse.persistence.antlr:jar:2.5.0:compile
[INFO] +- com.sun.jersey:jersey-server:jar:1.9:compile
[INFO] |  +- asm:asm:jar:3.1:compile
[INFO] |  \- com.sun.jersey:jersey-core:jar:1.9:compile
[INFO] \- com.googlecode:hibernate-memcached:jar:1.2:compile
[INFO]    \- spy:memcached:jar:2.3.1:compile

I suspect MOXy 2.8 is not compatible with Jersey 1.9. Please give me some advice.., thank you!

Was it helpful?

Solution

You have a mix of Jersey 1.x components and Jersey 2.x components. You can't mix the two.

You've declared a dependency on:

  • com.sun.jersey:jersey-server:jar:1.9

But you've also declared a dependency on:

  • org.glassfish.jersey.media:jersey-media-moxy:jar:2.8

Which is pulling in:

  • org.glassfish.jersey.core:jersey-common:jar:2.8 and...
  • javax.ws.rs:javax.ws.rs-api:jar:2.0)

If you want to use jersey-media-moxy you need to upgrade to Jersey 2.x.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top