2013-08-25 3 views
7

जर्सी का उपयोग करके सरल फ़ाइल अपलोड को लागू करने में असमर्थ। लापता निर्भरता त्रुटियों आवेदन बूटस्ट्रैप पर उठाया:जर्सी में सरल फ़ाइल अपलोड को कार्यान्वित नहीं कर सकता - "संसाधन के POST के साथ एनोटेटेड, कक्षा को वैध संसाधन विधि के रूप में पहचाना नहीं गया है। अनुपलब्ध"

The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0 
    SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1 
    SEVERE: Method, public javax.ws.rs.core.Response com.foo.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.foo.FS2Resource, is not recognized as valid resource method. 
unavailable 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 

ऐसा लगता है एक बाकी सेवा करने के लिए इनपुट पैरामीटर मानचित्रण के साथ कोई समस्या नहीं है की तरह? मैंने प्रलेखन पढ़ा है और कई उदाहरणों का पालन किया है, और मैं उन उदाहरणों से विचलित नहीं हूं।

कोड यह रहा:

@Path("v1/") 
public class FileUploadResource { 


    @POST 
    @Path("upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    @Produces({MediaType.APPLICATION_JSON}) 
    public Response uploadFile(
     @FormDataParam("file") InputStream is, 
     @FormDataParam("file") FormDataContentDisposition detail) { 

     String name = detail.getFileName(); 

     // do upload stuff 
     String output = .... 

     return Response.status(200).entity(output).build(); 
    } 

} 

मैं में खींच लिया "संकलन 'com.sun.jersey.contribs: जर्सी-बहुखण्डीय: 1.17.1'" FormDataParams के लिए।

संपादित:

@POST 
@Path("upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA)  
@Produces(MediaType.TEXT_PLAIN) 

public Response uploadFile(final MimeMultipart file) { 
    if (file == null) { 
    return Response.status(Response.Status.BAD_REQUEST).entity("Must supply a valid file").build(); 

    try { 
    for (int i = 0; i < file.getCount(); i++) { 
     // ... do something with file.getBodyPart(i)); 
    } 
    return Response.ok("done").build(); 
    } catch (final Exception e) { 
    return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build(); 
    } 
} 

यह शायद एक पर्याप्त समाधान नहीं है, लेकिन अभी भी की तह तक पहुंचने के लिए करना चाहते हैं: मैं जर्सी में है, लेकिन केवल इस अधिक आदिम फैशन में काम कर इसे प्राप्त करने में सक्षम था मुद्दा।

+0

मैं वास्तव में एक ऐसी ही समस्या में चल रहा हूँ। मेरे पास सभी जर्सी जार के समान संस्करण हैं, और भविष्य में मैपिंग समस्या से बचने के लिए मेरे प्रत्येक फॉर्मडेटा पैराम मूल्य अलग हैं। हालांकि, मेरे पास अभी भी बूटस्ट्रैप समस्या है। क्या पोस्ट का उपयोग करने और एनोटेशन का उत्पादन करने में कोई समस्या है या कुछ? एकमात्र तरीका है जिसके साथ मुझे यह समस्या है, मेरी पोस्ट एक है। –

+0

यह मेरे साथ एक सहयोगी द्वारा उल्लेख किया गया था कि यह एक ज्ञात बग है और यह कि कुछ लोगों के लिए यह कारण है कि यह उस विशिष्ट वितरण/कॉन्फ़िगरेशन के साथ करना है जिसके साथ आप काम कर रहे हैं। –

+0

क्या पर एक बग, बिल्कुल? फॉर्मडेटा पैरामोट एनोटेशन या जर्सी? –

उत्तर

9

मुझे एक ही समस्या थी।

यह एक संस्करण समस्या थी (मैं जर्सी.मल्टीपार्ट में 1.8 और बाकी जर्सी में 1.17.1) था। उन सभी को मेरे लिए 1.17.1 वर्कर्ड पर सेट करना।

यहां से मेरा उत्तर लिया:

Missing dependency for method when doing a file upload rest web service

+1

परफेक्टो ब्रो का उपयोग करने के बारे में बात कर रहा हूं ... महान जवाब, बुलेट की तरह काम किया, यह मेरे साथ एक ही मुद्दा है, 1.8 और 1.17.1 दोनों का उपयोग किया है, महान (क्लैप) –

1

अपने कोड में एक दिखाई समस्या यह है कि, आप बहुखण्डीय परम यानी "फाइल"

@FormDataParam("file") 

मल्टीपार्ट पैरामीटर एक पहचानकर्ता है दोनों इनपुट के लिए एक ही नाम का उपयोग कर रहे हैं, ताकि आप सही उपयोग करने की आवश्यकता है आपके विधि हस्ताक्षर में दूसरी वस्तु के लिए नाम। अन्यथा एक ही पैरा inputstream में और FormDataContentDisposition के लिए भी जा रहा है।

+0

यह कुछ समझ में आता है, लेकिन यह बूटस्ट्रैप समस्या है और रनटाइम नहीं है। साथ ही, FormDataParam के लिए JavaDoc वास्तव में दोनों मामलों में "फ़ाइल" का उपयोग करने का सुझाव देता है। –

+0

@rob जिस दस्तावेज़ का आप अनुसरण कर रहे हैं वह गलत है। एक ही नाम वाले दो मल्टीपार्ट पैरा को ठीक से मैप नहीं किया जा सकता है। क्लाइंट में फॉर्म पैराम्स का नाम बदलने का प्रयास करें और अपनी विधि में उसी नाम का उपयोग करें। –

+0

मैंने नामों को हास्य में बदल दिया और फिर भी वही समस्या देखी। याद रखें, यह बूटस्ट्रैप है ... क्लाइंट के पास इस मुद्दे से कोई लेना देना नहीं है। यह कंटेनर के * स्टार्टअप * पर हो रहा है। मुझे इस बिंदु पर मैपिंग मुद्दों से निपटने में खुशी होगी, लेकिन दुर्भाग्य से मैं अभी तक यहां तक ​​नहीं हूं। :) –

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