मुझे जावा 8 सुविधाओं का उपयोग करते समय सेवा शुरू होने पर ArrayIndexOutOfBoundsException
मिल रहा है (बीन सृजन)।जावा 8 का उपयोग करते समय बीन निर्माण पर ArrayOutOfBoundsException
जावा 8 स्थापित किया गया है और काम कर रहा है। कोड सही ढंग से संकलित करता है। सेवा शुरू होने पर, सेवा बंदरगाह को सुनने में विफल रहता है क्योंकि बीन्स नहीं बनते हैं। जब मैं कोड बदलता हूं (जावा 8 संरचनाओं को हटाता हूं) सेवा शुरू होती है और सब कुछ ठीक काम करता है। जावा 8 निर्माणों का उपयोग कर
for (Item itemObject : response) {
if (itemObject.hasId()) {
idList.add(String.valueOf(itemObject.Id());
}
}
एक ही कोड:
response.parallelStream()
.filter(itemObject -> itemObject.hasId())
.map(itemObject -> itemObject.getId())
.forEach(id -> idList.add(id));
वर्ग इस युक्त के लिए सेम
इस कोड मैं उपयोग कर रहा हूँ (काम कर कोड, जिसके लिए सेवा शुरू होता है) है कोड स्कैन घटक स्कैन का उपयोग कर बनाया गया है।
निम्नलिखित जब दूसरी कोड ब्लॉक पहले एक के स्थान पर प्रयोग किया जाता है अपवाद संदेश है:
Exiting with throwable: java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace/.../GetContainerIdForFcSkuAdapter.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace....Some.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
क्या मतलब नहीं है करने के लिए मुझे, क्यों एक समारोह के अंदर कोड है (जो बीन वर्ग के निर्माता नहीं) बीन बनाने के दौरान कवर किया जा रहा है। मैं यह पूछता हूं, क्योंकि जब मैं समानांतर धारा के बजाय लूप के लिए सामान्य का उपयोग करता हूं तो अपवाद नहीं होता है। ArrayOutOfBoundsException
तब नहीं उठना चाहिए जब फ़ंक्शन कहा जाता है और यह कोड वास्तव में उपयोग किया जाता है।
मैं इसे कैसे ठीक करूं?
'idList' क्या है? दूसरे संस्करण में आप 'समानांतर स्ट्रीम' का उपयोग कर रहे हैं ताकि आप इस सूची में कई धागे से आइटम जोड़ रहे हों। क्या सूची कार्यान्वयन है कि आप थ्रेड-सुरक्षित का उपयोग करते हैं? यदि आप समानांतर स्ट्रीम() 'के बजाय' stream() 'का उपयोग करते हैं तो त्रुटि गायब हो जाती है? – Jesper
इसके अलावा, सूची में किसी स्ट्रीम की सामग्री प्राप्त करने का सामान्य तरीका 'stream सूची = stream.collect (collect.toList())' stream.forEach (o -> list.add (o) '' के बजाय 'है। –
Jesper
मैं वास्तव में एकाधिक धागे से नहीं जोड़ रहा हूं। जावा आंतरिक रूप से लूप को अनलॉक कर रहा है और समानांतर है। स्टीम का उपयोग करने में त्रुटि अभी भी मौजूद है। जैसा कि मैंने कहा था, जब कोड कहा जाता है तो कोड का ब्लॉक निष्पादित किया जाना चाहिए, बीन निर्माण पर नहीं। क्या इस ब्लॉक का इस्तेमाल हो रहा है और सेवा शुरू होने पर ArrayIndexOutOfBounds दे रहा है। कृपया नीचे मेरा जवाब देखें और मुझे बताएं कि क्या आपको लगता है कि – akshitBhatia