2012-11-06 8 views
6

मैं एक IMAP खाते से JavaMail 1.4.5 का उपयोग कर संदेश लाने के लिए कोशिश कर रहा हूँ और मैं BODYSTRUCTURE.parseParameters विधि में एक नल पॉइंटर एक्सेप्शन मिलता है।जावामेल: BODYSTRUCTURE.parse पैरामीटर में शून्य सूचक निष्कासन। क्या यह एक बग है?

parseParameters कोड देख रहे हैं, मैं इस लाइन

लगता है
list.set(null, "DONE"); // XXX - hack 

समस्या यह है कि सेट विधि शून्य मान को .toLowerCase() फोन करने की कोशिश करता है !!!

प्रतिक्रिया यह पार्स करने के लिए कोशिश कर रहा है यह है:

* 1 FETCH (BODYSTRUCTURE (("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "7BIT" 55 4 NIL NIL NIL NIL)(("TEXT" "HTML" ("CHARSET" "us-ascii") NIL NIL "7BIT" 410 10 NIL NIL NIL NIL)("IMAGE" "JPEG" ("NAME" "image.jpg") "<[email protected]>" NIL "BASE64" 536628 NIL ("inline" ("FILENAME" "image.jpg")) NIL NIL) "RELATED" ("TYPE" "text/html" "BOUNDARY" "Apple-Mail=_56FA3EC6-FB02-4882-A1C5-487652E3B4E5") NIL NIL NIL) "ALTERNATIVE" ("BOUNDARY" "Apple-Mail=_CB164992-2501-4351-94D1-61CE7C8D90DC") NIL NIL NIL)) 

और, डिबग सक्षम करने, मैं उन संदेशों को मिलती है:

DEBUG IMAP: parsing BODYSTRUCTURE 
DEBUG IMAP: msgno 1 
DEBUG IMAP: parsing multipart 
DEBUG IMAP: parsing BODYSTRUCTURE 
DEBUG IMAP: msgno 1 
DEBUG IMAP: single part 
DEBUG IMAP: type TEXT 
DEBUG IMAP: subtype PLAIN 
DEBUG IMAP: parameter name CHARSET 
DEBUG IMAP: parameter value us-ascii 

और फिर NullPointerException

Exception in thread "main" java.lang.NullPointerException 
at javax.mail.internet.ParameterList.set(ParameterList.java:165) 
at com.sun.mail.imap.protocol.BODYSTRUCTURE.parseParameters(BODYSTRUCTURE.java:404) 
at com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:224) 
at com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:109) 
at com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:158) 
at com.sun.mail.imap.protocol.FetchResponse.<init>(FetchResponse.java:67) 
at com.sun.mail.imap.protocol.IMAPResponse.readResponse(IMAPResponse.java:136) 
at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:270) 
at com.sun.mail.iap.Protocol.command(Protocol.java:313) 
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1529) 
at com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:1521) 
at com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:1221) 
at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1307) 
at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:623) 
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927 

किसी के लिए धन्यवाद जो मेरी मदद कर सकता है!

उत्तर

8

आप शायद JavaMail के दो विभिन्न संस्करणों से JavaMail कक्षाओं का मिश्रण मिल गया है। Javax.mail के अन्य उदाहरणों के लिए अपने क्लासपाथ की जांच करें। * कक्षाएं, शायद j2ee.jar या javaee.jar में।

10

अंततः मुझे समस्या का कारण पता चला।

मैं अपने प्रोजेक्ट में अपाचे CXF शामिल कर रहा हूँ।

CXF Geronimo-javamail_1.4_spec जो javamail वर्ग के कुछ अधिलेखित कर देता है के लिए एक संदर्भ भी शामिल है।

संदर्भ को छोड़कर Geronimo के लिए, सब कुछ सही ढंग से काम करता है!

+3

मैं एक बहुत लंबे खर्च दिन सिर्फ इस समाधान की तलाश में है।एक बार जब मैंने आपकी पोस्ट पाई तो मुझे खुद को जाने के लिए केवल आधे घंटे लग गए। अपना प्रश्न रखने और यहां जवाब देने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। यह मेरे लिए एक बड़ा अंतर बना दिया। – Spina

0

मेरे पास समान (शायद वही) समस्या थी।

समस्या मेल सर्वर बग इस ओरेकल पूछे जाने वाले प्रश्न here में वर्णित के साथ जुड़ा हुआ था।

समाधान है करने के लिए:

  • अपने IMAP सर्वर में बग को ठीक
  • या Oracle पूछे जाने वाले प्रश्न में वर्णित तरीके का उपयोग

    // Get the message object from the folder in the 
    // usual way, for example: 
    MimeMessage msg = (MimeMessage)folder.getMessage(n); 
    
    // Use the MimeMessage copy constructor to make a copy 
    // of the entire message, which will fetch the entire 
    // message from the server and parse it on the client: 
    MimeMessage cmsg = new MimeMessage(msg); 
    
    // The cmsg object is disconnected from the server so 
    // setFlags will have no effect (for example). Use 
    // the original msg object for such operations. Use 
    // the cmsg object to access the content of the message. 
    

या

// Get the message object from the folder in the 
// usual way, for example: 
MimeMessage msg = (MimeMessage)folder.getMessage(n); 

// Copy the message by writing into an byte array and 
// creating a new MimeMessage object based on the contents 
// of the byte array: 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
msg.writeTo(bos); 
bos.close(); 
SharedByteArrayInputStream bis = 
     new SharedByteArrayInputStream(bos.toByteArray()); 
MimeMessage cmsg = new MimeMessage(session, bis); 
bis.close(); 

// The cmsg object is disconnected from the server so 
// setFlags will have no effect (for example). Use 
// the original msg object for such operations. Use 
// the cmsg object to access the content of the message. 

मैं इस ओरेकल मंचों को यह धन्यवाद पाया है thread

0

मुझे इस समस्या

मैं अपने प्रोजेक्ट में निर्भरता के नीचे जोड़ें के लिए सुझाव देने के लिए धन्यवाद और सब कुछ ठीक से काम कर

<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-api</artifactId> 
    <version>2.1.3</version> 
    <type>jar</type> 
</dependency> 
संबंधित मुद्दे