2015-12-17 11 views
6

मैं निम्न विधि के लिए संपत्ति फ़ाइल का यूआरआई पास करनी होगी (3 पार्टी जार)कैसे एक संपत्ति फ़ाइल

defaultConfiguration = Factory.createDefaultConfiguration(propertiesUrl.toURI()); 
PayClient client = Factory.createClient(defaultConfiguration); 

जब मैं सर्वर पर मेरी कोड को तैनात करने के लिए एक सर्वर पथ से एक URL स्थान प्राप्त करने के लिए, मैं इस पथ यानी गुण Url.toURI() abc://localhost/server/test/payment/ConfigLookup.properties

तृतीय पक्ष एप्लिकेशन इस मान को अस्वीकार करता है और कनेक्शन क्लाइंट बनाने के लिए उपयोग की जाने वाली कॉन्फ़िगरेशन नहीं बनाता है।

एक नमूना कोड जहां मेरे स्थानीय बिन फ़ोल्डर में संपत्ति फ़ाइल पास होती है, ठीक होने पर ठीक काम करती है।

पथ propertiesUrl.toURI()

file:/D:/Code/bin/ConfigLookup.properties 

ऊपर एक सफल कनेक्शन बनाता है के रूप में प्राप्त किया।

कृपया मुझे उनके बीच क्या गुम है पर मार्गदर्शन करें। स्थानीय कोड काम करता है जैसे सर्वर कोड समान रूप से काम कैसे करें।

+0

"एबीसी:" योजना क्या है? –

+0

यह वास्तव में सर्वर है जहां हम कोड को तैनात करते हैं। पोस्ट परिनियोजन, ऐसा लगता है कि प्रोजेक्टनाम (जिसे मैंने एबीसी के रूप में नामित किया है) :: //localhost/server/test/payment/ConfigLookup.properties – user2967948

+0

यह स्पष्ट नहीं है कि "इस मान को अस्वीकार करता है" का अर्थ है, क्या कोई त्रुटि है संदेश या कॉन्फ़िगरेशन बस लोड नहीं किया जा रहा है। क्या तीसरे पक्ष के जार कोई लॉगिंग करते हैं? क्या आप इससे कोई लॉगिंग प्राप्त कर सकते हैं जो कि जो कुछ भी ढूंढ रहा है उसके बारे में अधिक संकेत प्रदान कर सकता है? –

उत्तर

0

आप क्लासलोडर के माध्यम से संसाधन प्राप्त कर सकते हैं और उसके बाद यूआरआई फ़ाइल के लिए, विवरण के लिए here देखें।

+0

मुझे संसाधन मिला, हालांकि यह एबीसी: //localhost/server/test/payment/ConfigLookup.properties जैसा दिखता है जो तृतीय पक्ष जार वैध यूआरआई के रूप में स्वीकार नहीं करता है। – user2967948

1

जाहिर है कि तृतीय पक्ष JAR स्थानीय डिस्क फ़ाइल सिस्टम आधारित यूआरआई की अपेक्षा करता है। यह वास्तव में उनकी तरफ एक गलती है। यूआरआई वास्तव में बैठे संदर्भ के बारे में चिंता किए बिना uri.toURL().openStream() के माध्यम से सामग्री प्राप्त करना संभव है। मूल्य के इनकार से पता चलता है कि तीसरी पार्टी new FileInputStream(new File(uri)) का उपयोग कर रही है। सबसे पहले और सबसे महत्वपूर्ण, यह उनकी तरफ से सूचित किया जाना चाहिए ताकि वे इसे ठीक से ठीक कर सकें।

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

उदाहरण के नीचे मान लें कि आप एक सर्वलेट के अंदर हैं और इस प्रकार getServletContext() पहले से ही हाथों में हैं। अन्यथा, आपके द्वारा उपयोग किए जा रहे जावा ईई आधारित ढांचे में ServletContext आपको देने/इंजेक्ट करने की सुविधा होनी चाहिए।

String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR); 
File tempFile = File.createTempFile("temp-", ".properties", new File(tempDir)); 
Files.copy(propertiesUrl.openStream(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); 
// ... 
defaultConfiguration = Factory.createDefaultConfiguration(tempFile.toURI()); 

कहा कि, यदि आप पूरी तरह यकीन है कि यह गुण फ़ाइल बल्कि /WEB-INF फ़ोल्डर में नहीं रखा जाना चाहिए रहे हैं? अभी यह वेबब्रोसर वाले किसी भी व्यक्ति के लिए सार्वजनिक रूप से सुलभ है। ए.ओ. भी देखें Where to place and how to read configuration resource files in servlet based application?

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