3

I am using Spring + Jersey to build an API service . Recently , I try to incorporate Spring Data to my server . I haven't truly use any Repositories in my running code , just add one line in my app.xml :

<jpa:repositories base-package="destiny.web" entity-manager-factory-ref="entityManagerFactoryApp" />

But ! I notice my API not working , complaining "A message body writer for Java class xxx , and Java type class xxx , and MIME media type application/json was not found"

If I remove the "jpa:repositories ..." line in my xml , everything works fine ! and , all provider classes are registered by spring :

{http://*:8080-1} Registering Spring bean, apiResultJsonWriter, of type destiny.web.api.ApiResultJsonWriter as a provider class
{http://*:8080-1} Registering Spring bean, webApi, of type destiny.web.api.WebApi as a root resource class
{http://*:8080-1} Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'

But , if I add "jpa:repositories..." line in my XML , only "root resources class" are registered :

{http://*:8080-1} CDI support is enabled
{http://*:8080-1} Using default applicationContext
{http://*:8080-1} Registering Spring bean, webApi, of type destiny.web.api.WebApi as a root resource class
{http://*:8080-1} Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'

All JAXRS's @Provider(s) are missing !

I don't know if it is Spring-Data's bug ? And how to solve it ?

environment :

spring-3.1
jersey-core-1.8.jar
jersey-server-1.8.jar
jersey-spring-1.8.jar

spring-data-jpa-1.0.3.RELEASE.jar
spring-data-commons-core-1.1.0.RELEASE.jar

server : resin-4.0.25

Related dependencies :

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-server</artifactId>
  <version>1.8</version>
</dependency>
<dependency>
  <groupId>com.sun.jersey.contribs</groupId>
  <artifactId>jersey-spring</artifactId>
  <version>1.8</version>
  <exclusions> 
    <exclusion>
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
    </exclusion> 
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
  <version>1.0.3.RELEASE</version>
</dependency>

( I tried to add jersey-json , but still not working )

smallufo
  • 11,516
  • 20
  • 73
  • 111

1 Answers1

0

You need to register the packages that contain classes annotated with @Provider

in Jersey 2 this is done via by calling the packages method in your ResourceConfig class.

I believe there is also a basepackages attribue you can put on the servlet. See here Autodiscover JAX-RS resources with CXF in a Spring application

Community
  • 1
  • 1
PaulNUK
  • 4,774
  • 2
  • 30
  • 58