2017-10-10 98 views
1

我想用Spring 4與Jersey 1.8一起使用。但我無法使用Spring在Rest類中注入依賴項。用Spring配置Rest(Jersey)

每次我嘗試並調用自動裝配的依賴項時,我都會得到NULL。任何人都可以提出爲什麼我的依賴沒有被注入?

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 



    <servlet> 
     <servlet-name>Rest</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring-servlet.xml</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>org.portal.services</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Rest</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

爲spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    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="org.portal.services"></context:component-scan> 
    <context:annotation-config /> 

    <bean 
     class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> 
     <property name="location"> 
      <value>WEB-INF/dataSource.properties</value> 
     </property> 
    </bean> 
    <import resource="hibernate.cfg.xml" /> 
    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/"></property> 
     <property name="suffix" value=".jsp"></property> 
    </bean> 

    <bean id="addCountryService" class="org.portal.services.AddCountryService"> 
     <property name="addCountryProcessor" ref="addCountryProcessor"></property> 
    </bean> 

    <bean id="addCountryProcessor" class="org.portal.processors.AddCountryProcessor"> 
     <property name="hibernateTemplate" ref="hibernateTemplate" /> 
    </bean> 


</beans> 

休息Coltroller

package org.portal.services; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import org.portal.dto.Country; 
import org.portal.processors.AddCountryProcessor; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 
import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.xml.DomDriver; 

@Component 
@Path("/Country") 
public class AddCountryService { 

    @Autowired 
    private AddCountryProcessor addCountryProcessor; 

    @POST 
    @Path("/addCountry") 
    @Produces(MediaType.APPLICATION_XML) 
    @Consumes(MediaType.APPLICATION_XML) 
    public String addCountry(String newCountry) { 

     XStream xStream = new XStream(new DomDriver()); 
     xStream.alias("country", Country.class); 
     xStream.alias("id", String.class); 
     xStream.alias("name", String.class); 
     xStream.alias("region", Integer.class); 

     Country country = (Country)xStream.fromXML(newCountry); 
     System.out.println("processor is "+addCountryProcessor); 

     if(country != null){ 
      addCountryProcessor.addCountry(country); 
     } 
     return newCountry; 
    } 

    public void setAddCountryProcessor(AddCountryProcessor addCountryProcessor) { 
     this.addCountryProcessor = addCountryProcessor; 
    } 

    public AddCountryProcessor getAddCountryProcessor() { 
     return addCountryProcessor; 
    } 

} 

發佈請求後爲 「http://localhost:7070/HumanResourcePortal/rest/Country/addCountry」,流量即將「addCountry( )「的方法,但它然後打印addCountryProcessor爲空

+0

如果在實例化AddCountryProcessor類或hibernate時出錯,您可以在開始戰爭或部署時檢查日誌嗎? –

+0

控制檯沒有錯誤實例化AddCountryProcessor類 – shivam

+0

可能重複[this](https://stackoverflow.com/q/19745187/8101556)問題,你應該可以用[this]解決(https:// stackoverflow。 com/a/19751981/8101556)的答案。希望這可以幫助。如果您不想更改servlet,請使用「@ com.sun.jersey.spi.inject.Inject」而不是「Autowired」來嘗試。 –

回答

0

有兩個選項可以在這裏找到:

  • 更換@Autowired@com.sun.jersey.spi.inject.Inject。這個@Inject註釋將從組態的DI框架注入。

  • 使用com.sun.jersey.spi.spring.container.servlet.SpringServlet通過彈簧集成來部署您的資源。對於Spring集成,你需要包括以下依賴性:

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

Spring的依賴都在這裏排除把你宣佈一個,而不是jersey-spring使用的一個。

+0

需要一個更多的幫助................佔位符的不工作...從日誌我可以看到屬性文件正在加載,但佔位符不工作在我的休眠文件 – shivam

+0

可以你在另一個問題上發佈更多細節? –

相關問題