2010-06-04 10 views
5

से पढ़ें मेरे पास मेरे 'src/main/recources' फ़ोल्डर में अलग-अलग XML-फ़ाइलें हैं, और मैं उन्हें अपने वेबप्लिकेशन से पढ़ना चाहता हूं।संसाधन फ़ोल्डर (WAR) में xml फ़ाइलों को स्टोर करें, कोड

File f = new File("file1.xml"); 
f.getAbsolutePath(); 

कोड एक WebService अंदर लागू हो जाता है, और इस बाहर प्रिंट 'C: \ Users \ प्रशासक' जब मैं बिलाव-server-उत्पादन के अंदर देखो। मेरा वर्तमान समाधान 'फ़ाइल 1.xml'-दस्तावेज़ों को 'सी: \' - फ़ोल्डर में, WAR के बाहर रखना है, लेकिन इस तरह मेरा युद्ध हस्तांतरणीय नहीं है।

मैं भी

<bean name="webService"> 
     <property name="document"> 
     <value>classpath:file1.xml</value> 
     </property> 
    </bean> 

की कोशिश की है लेकिन यह सिर्फ बाहर प्रिंट: यह पार्स करने के बिना "classpath file.xml"।

सादर, पीट

उत्तर

5

यदि आप मानक maven2 युद्ध पैकेजिंग का उपयोग कर रहे हैं, तो आपकी file1.xml को आपके warfile में निर्देशिका वेब-आईएनएफ/कक्षाओं में कॉपी किया गया है।

आप इस फ़ाइल को कक्षापथ के माध्यम से एक्सेस कर सकते हैं।

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/file1.xml"); 
File resourceFile = new File(resourceUrl.toURI()); 
+2

आह यह काम करता है, मुझे पहली पंक्ति को थोड़ा सा संशोधित करना पड़ा: यूआरएल संसाधन यूआरएल = थ्रेड.current थ्रेड()। GetContextClassLoader()। GetResource ("file1.xml"); फ़ाइल 1.xml निश्चित रूप से संसाधन-फ़ोल्डर में होना चाहिए। बहुत बहुत धन्यवाद! – JavaPete

+0

लेकिन आपको वर्तमान थ्रेड() के माध्यम से जाने की आवश्यकता क्यों है। GetContextClassLoader()? क्या आपके पर्यावरण में कुछ प्रकार का सुरक्षा प्रतिबंध चल रहा है या क्या मुझे कुछ याद आ रहा है? क्या आप मानक मैवेन युद्ध प्लगइन या किसी असेंबली या अन्यथा का उपयोग करके अपना वेबपैप बना रहे हैं? –

0

आप नीचे वेब-INF एक निर्देशिका में फ़ाइल डाल (या भीतर वेब-INF ही) तो आप इसे प्रयोग पढ़ सकते हैं ServletContext के getResourceAsStream विधि:

try { 
    InputStream is = context.getResourceAsStream("/WEB-INF/file1.xml"); 
    ... 
} catch (IOException e) { 
    ... 
} 
+0

मैं के बाद से इस कोड को एक वेब सेवा विधि (वसंत-WS) के अंदर रहता है, एक ServletContext वस्तु नहीं है। या क्या मैं इस बिंदु को याद कर रहा हूं? – JavaPete

0

आप पथ/WEB-INF/कक्षाओं में मौजूद गुण फ़ाइल में पथ जानकारी डाल सकते हैं - और इस जानकारी को रनटाइम पर एप्लिकेशन में लोड कर सकते हैं।

इस पथ संपत्ति के लिए अलग-अलग मूल्य रखने के लिए आप मेवेन प्रोफाइल या किसी अन्य निर्माण उपकरण के विकल्प का उपयोग कर सकते हैं - ताकि उस वातावरण के लिए उपयुक्त पथ के लिए सही गुण वाले WAR फ़ाइल में विभिन्न वातावरण परिणाम हो।

+0

हां लेकिन मैं ऐसा करने से बचना चाहता हूं क्योंकि फ़ाइल के सापेक्ष पथ के लिए मुझे अलग-अलग कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता नहीं होगी। लेकिन अगर मैं काम करने के लिए और कुछ नहीं प्राप्त कर सकता, तो मैं इस समाधान का उपयोग करूंगा, धन्यवाद! – JavaPete

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