无法初始化 SpringServlet for Jersey:JacksonJaxbJsonProvider 必须是单例



我是 REST/Jersey 新手,我有一个简单的 RESTful Java Web 服务,使用 Spring 版本的 Jersey 实现......

@Service
@Path("/getAccountBalance")
public class GetAccountBalanceService {
@Autowired
private ILicenseService licenseService;
  @GET
  @Path("/{param}")
  public Response provideService(@PathParam("param") String licenseUUID) {
    License license = this.licenseService.getByUUID(licenseUUID);
    String output = "Balance on the account : " + license.getBalanceValue();
    return Response.status(200).entity(output).build();
  }

并配置了带有 Web .xml Spring 支持的球衣 servlet。

 <servlet>
      <servlet-name>jersey-servlet</servlet-name>
      <servlet-class>
             com.sun.jersey.spi.spring.container.servlet.SpringServlet
      </servlet-class>
      <init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.freedomoss.crowdcontrol.api</param-value>
    </init-param>
      <load-on-startup>1</load-on-startup>

<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/service/*</url-pattern>
</servlet-mapping>

但是当我尝试调用该服务时,我收到以下异常....

Dec 19, 2014 11:34:04 AM com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
 INFO: Registering Spring bean, jsonProvider, of type com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider as a provider class
  SEVERE: Exception occurred when intialization
 java.lang.RuntimeException: The scope of the component class com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider must be a singleton
at com.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(IoCProviderFactory.java:102)

所以我在我的应用程序的另一部分使用 JacksonJaxbJsonProvider,那么为什么 Jersey spring 会碰到这个类然后抱怨它呢?

谢谢。

我能够通过搜索应用程序上下文XML(这对我的应用程序来说非常重要(来消除此错误,以查找对JacksonJaxbJsonProvider的所有引用。我看到 2 个单独的 bean 被定义为使用此类。我删除了其中一个并将单例属性添加到我保留的那个中......

<bean id="jaxbObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
<bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" scope="singleton">
    <property name="mapper" ref="jaxbObjectMapper" />
</bean> 

希望这对某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新