2011-02-04 11 views
11

हम जेबॉस 4 से जेबॉस 6 तक हमारे आवेदन को अपग्रेड कर रहे हैं।मैं जेबॉस वीएफएस क्यों नहीं खोल सकता:/यूआरएल?

हमारे आवेदन के कुछ टुकड़े क्लाइंट को असामान्य तरीके से वितरित किए जाते हैं: जार हमारे आवेदन के अंदर देखे जाते हैं और क्लाइंट को भेजे जाते हैं सर्वलेट, जहां ग्राहक कुछ समर्थन कार्यों को चलाने के लिए उन्हें निकालता है।

जेबॉस 4 में हम इन जारों को क्लासलोडर के साथ देखेंगे और एक जार: // यूआरएल देखेंगे जिसका उपयोग जार को पढ़ने और क्लाइंट को अपनी सामग्री भेजने के लिए किया जाएगा।

जेबॉस 6 में जब हम लुकअप करते हैं तो हमें एक vfs:/URL मिलता है। मैं समझता हूं कि यह org.jboss.vfs पैकेज से है। दुर्भाग्यवश जब मैं इस यूआरएल पर ओपनस्ट्रीम() को कॉल करता हूं और स्ट्रीम से पढ़ता हूं, तो मुझे तुरंत एक ईओएफ मिलता है (पढ़ें() रिटर्न -1)।

क्या देता है? मैं इस यूआरएल का संसाधन क्यों पढ़ नहीं सकता?

मैंने जेबॉस वीएफएस एपीआई के माध्यम से फ़ाइल खोलने के लिए अंतर्निहित वीएफएस पैकेजों तक पहुंचने का प्रयास करने का प्रयास किया है, लेकिन अधिकांश एपीआई निजी प्रतीत होता है, और मुझे वीएफएस से अनुवाद करने के लिए दिनचर्या नहीं मिल सका:/एक वीएफएस वर्चुअलफाइल ऑब्जेक्ट के लिए यूआरएल, तो मैं कहीं भी नहीं मिल सका।

मैं जेबॉस के भीतर डिस्क पर फ़ाइल को खोजने का प्रयास कर सकता हूं, लेकिन यह दृष्टिकोण अपग्रेड पर बहुत विफलता प्रवण लगता है।

हमारा पुराना दृष्टिकोण क्लाइंट को जार वितरित करने के लिए जावा वेब स्टार्ट का उपयोग करना था और फिर उन्हें निकालने के लिए जावा वेब स्टार्ट कैश के भीतर उन्हें देखना था। लेकिन जावा के हर मामूली अपग्रेड पर यह टूट गया क्योंकि कैश का लेआउट बदल गया।

+0

org.apache.commons.vfs। *; यह आयात इस संबंध में भी मदद करता है। –

+0

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

उत्तर

4

मुझे पता चला है कि getContent() विधि मुझे वर्चुअलफाइल देगी, जो शायद मैं उपयोग कर सकता हूं। अभी भी यह नहीं समझाता है कि मैं सिर्फ एक vfs:/URL पर ओपनस्ट्रीम() क्यों नहीं कर सकता।

import org.jboss.vfs.*; 

URLConnection conn = new URL("vfs:/...").openConnection(); 
VirtualFile vf = (VirtualFile)conn.getContent(); 
InputStream is = vf.openStream(); 
10

पिछला उत्तर अभी भी एक स्ट्रीम उत्पन्न करता है जिसे पढ़ा नहीं जा सकता है।

मुझे पता चला कि मैं एक भौतिक फ़ाइल प्राप्त कर सकता हूं जो वर्चुअलफाइल संदर्भित करता है, लेकिन लौटाया गया परिणाम उस निर्देशिका के भीतर सामग्री/नाम वाली निर्देशिका को संदर्भित करता है जिसमें वास्तविक फ़ाइल है जिसे मैं ढूंढ रहा हूं। तो:

import org.jboss.vfs.*; 

    String filename = ...; 
    URLConnection conn = new URL("vfs:/...").openConnection(); 
    VirtualFile vf = (VirtualFile)conn.getContent(); 
    File contentsFile = vf.getPhysicalFile(); 
    File dir = contentsFile.getParentFile(); 
    File physicalFile = new File(dir, filename); 
    InputStream is = new FileInputStream(physicalFile); 

क्या गड़बड़ है। मुझे अभी भी मेरा मूल प्रश्न नहीं समझ रहा है, यही कारण है कि जेबॉस ने मुझे एक यूआरएल दिया है जिसे पढ़ा नहीं जा सकता है? लेकिन कम से कम मैं अभी तक आगे बढ़ सकता हूं।

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