2014-09-05 5 views
1

Я знаю, что это было задано раньше, но я проверил этот код на все предоставленные ответы и до сих пор не вижу, что с ним не так ... Мои поля @Autowired просто не вставляются (т. е они равны нулю), здесь моя установка:@ Не работает с resteasy

  • Tomcat 7
  • Resteasy 3.0.8
  • Spring Framework 4.0.6
  • Java 8

pom.xml (соответствующая зависимость)

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxb-provider</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jettison-provider</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-spring</artifactId> 
     <version>3.0.8.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.0.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>4.0.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.0.6.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.0.6.RELEASE</version> 
    </dependency> 

web.xml

<!-- <context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> --> 

<context-param> 
    <param-name>resteasy.resources</param-name> 
    <param-value>com.reporting.rest.MyRestResource</param-value> 
</context-param> 

<!-- this need same with resteasy servlet url-pattern --> 
<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/reporting</param-value> 
</context-param> 

<!-- Must come before any other listener --> 
<listener> 
    <listener-class> 
     org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
</listener> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/reporting/*</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/application-context.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener 
    </listener-class> 
</listener>  

приложения context.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="com.reporting" /> 

</beans> 

И, наконец, мой класс Java:

package com.reporting.rest; 

@Path("/events") 
@Produces("application/json") 
public class MyRestResource { 
.... 
@Autowired IProductionEventService productionEventService; 
.... 
} 

Я также попытался аннотировать сам класс с @Component, но это не помогло.

Заранее благодарен!

+3

Как вы интегрируете обе структуры? Они не будут связаны магически. –

+0

@Luiggi - из примеров, которые я видел, эта зависимость должна сделать: org.jboss.resteasy Resteasy-весна 3.0.8.Final dhalia

+0

Это просто копирует банки в проект библиотека. Это как положить сырой помидор и весь салат в тарелку и назвать его салатом ... Пожалуйста, следуйте этому руководству: http://www.mkyong.com/webservices/jax-rs/resteasy-spring-integration-example/ –

ответ

1

Наконец нашел проблему, похоже, существует проблема интеграции Resteasy к весне 4 - https://issues.jboss.org/browse/RESTEASY-1012

I понизило весной версии, и это сработало. Надеюсь, это поможет кому-то еще сэкономить время!

+0

Вы действительно спасли меня некоторое время. Дополнительная информация: я перешел на последнюю версию версии 3.x. В моем случае он работал только тогда, когда я аннотировал класс обслуживания rest с '@ Component' и' @ Path'. –

3

Вы не можете использовать autwire с ресурсами resteasy напрямую. Вы должны сказать весне, что конкретный класс собирается использовать автомастеру. Документы можно найти here.

Вы можете сделать это, используя следующий код.

@Component 
@Path("/trn") 
public class TrnResource extends SpringBeanAutowiringSupport { 

} 

Вы должны иметь следующие зависимости я вам pom.xml,

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring-framework.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring-framework.version}</version> 
    </dependency>  

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring-framework.version}</version> 
     <type>jar</type> 
     <scope>compile</scope> 
    </dependency> 
+0

Прошу прощения, но это неправда. Resteasy знает, что искать аннотированные ресурсы можно несколькими способами - либо через свойство resteasy.scan, либо путем перечисления ваших ресурсов непосредственно в вашем web.xml. – dhalia

+0

@dhalia - Да, resteasy знаю, как найти там аннотации, а не весенние аннотации. Кстати, это самый простой способ, если вы хотите использовать autwire в ресурсе resteasy. –

Смежные вопросы