2011-07-13 13 views
5

मैं जर्सी का उपयोग कर एक रेस्ट क्लास में सेवाओं को इंजेक्ट करने की कोशिश कर रहा हूं।जर्सी और वसंत एकीकरण - बीन इंजेक्शन रनटाइम पर शून्य हैं

कोई फर्क नहीं पड़ता कि मैं इस कक्षा में इंजेक्ट करने का प्रयास कैसे करता हूं या रनटाइम पर शून्य के रूप में दिखाई देता है। लॉग फाइलों में दिखने से पता चलता है कि जब वेब ऐप शुरू होता है तो सेटजेसनटेस्ट सेवा को कॉल किया जा रहा है और यह इस बिंदु पर शून्य नहीं है। लेकिन, जब इसे इस कक्षा में एक पुट अनुरोध के साथ बाद में एक्सेस किया जाए, तो यह शून्य है।

मैं पूरी तरह से परेशान हूं।

@Named 
@Path("JsonTest") 
public class JsonTest { 
    @Context 
    Request request; 
    @Context 
    UriInfo uriInfo; 

    protected final Logger log = Logger.getLogger(getClass()); 

    private JsonTestService jsonTestService; 

    @Autowired 
    public void setJsonTestSerivce(JsonTestService jsonTestService) { 
     log.info("Setting JsonTestService."); 
     if (jsonTestService == null) { 
      log.info("JsonTestService is null at injection"); 
     } 
     this.jsonTestService = jsonTestService; 
    } 

    @Inject 
    public ScrapIntermediate scrapIntermediate; // just a plain empty class with an is true method 

    @PUT 
    @Path("{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public void putJson(@PathParam("id") String id) { 
     log.info("Putting some json at " + id); 
     if (scrapIntermediate == null) { 
      log.info("scrapIntermediate is null..."); 
     } 
     if (jsonTestService != null) { 
      jsonTestService.sendUpdate(); 
     } else { 
      log.info("jsonTestService is null..."); 
     } 
    } 
} 

कोई भी विचार:

वर्ग इस तरह दिखता है?

अद्यतन:

web.xml (जर्सी)

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>EDAS</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
+2

इस जर्सी कक्षा में वेब अनुरोध मैप किए गए हैं? वसंत की तरह लगता है कि इस वर्ग का एक उदाहरण तत्काल है, लेकिन जर्सी अनुरोधों को संभालने में उपयोग करने के लिए एक और उदाहरण तत्काल करता है। –

+0

मैंने अपने web.xml के जर्सी भाग को दिखाने के लिए प्रश्न अपडेट किया है। जर्सी का जिक्र करने वाला यह एकमात्र अन्य स्थान है। – zclark

+0

और हल हो गया। मेवेन और मेरे जर्सी आयात के साथ झूठ बोलने वाला मुद्दा वसंत-संदर्भ 2.5.6 और 3.0.5 दोनों आयात किया जा रहा है। इसने एनोटेशन संघर्ष का कारण बना दिया और उसी वर्ग के विभिन्न तत्कालताओं को जन्म दिया। एक बार यह मुझे जवाब देने के बाद इसे एक उत्तर के रूप में पोस्ट करेगा ... अंतर्दृष्टि मैट के लिए धन्यवाद। – zclark

उत्तर

4

<servlet-class> 
    com.sun.jersey.spi.spring.container.servlet.SpringServlet 
</servlet-class> 

प्रयास करें तुम भी contextConfigLocation<context-param> आवश्यकता होगी, लेकिन मुझे लगता है तुम्हारे पास है। See here सेटअप के बारे में अधिक जानकारी के लिए

जैसा कि मैट बी ने सुझाव दिया है कि वसंत आपकी वस्तुओं को तुरंत चालू करता है, लेकिन जर्सी वसंत के बारे में कुछ भी नहीं जानता है और उन्हें फिर से चालू करता है। जब आप SpringServlet का उपयोग करते हैं तो इसे वसंत एप्लिकेशन संदर्भ का पता लगाना चाहिए।

उसने कहा, वसंत-एमवीसी रीस्टफुल सेवाओं के लिए समर्थन प्रदान करता है जो जेएक्स-आरएस के समान है। आप इसे भी आजमा सकते हैं।

+0

हाँ, मैं इसके साथ खेल रहा था और इसे काम करने के दौरान इसका उपयोग कर समाप्त हो गया। यह सिर्फ उचित मेवेन बहिष्करण के बिना मुझे नहीं जाने देगा। – zclark

संबंधित मुद्दे