2015-01-14 74 views
-1

我試圖讓java程序自動處理xml作爲電子郵件附件發送到應用程序的內容。我一直在嘗試用不同的方法來查詢電子郵件中尋找xml文件的組件,唯一可行的方法是輪詢bodypart如何最好地確定身體部位是否爲xml文件,然後將該xml文件自動轉換爲輸入流?我想將任何xml附件轉換爲inputstream,然後再進一步處理inputstreamJavaMail附件是一個InputStream實例嗎?

這裏是我的想象:

for(int y=1;y<=msg_count;y++){ 
    Message msg = inbox.getMessage(y); 
    if(msg.getContent() instanceof Multipart){ 
     Multipart mp = (Multipart) msg.getContent(); 
     for(int a=0;a<mp.getCount();a++){ 
      BodyPart bp = mp.getBodyPart(a); 
      if(bp.getFileName()!=null){ 
       if(bp.getFileName().endsWith(".xml")){ 
        if(bp.getContent() instanceof com.sun.mail.imap.IMAPInputStream){ 
         InputStream myis = (InputStream)bp.getContent(); 
         Blob blob = null; 
         byte[] content = IOUtils.toByteArray(myis); 
         try {blob = new SerialBlob(content);} 
         catch (SerialException e) {e.printStackTrace();} 
         catch (SQLException e) {e.printStackTrace();} 
        } 
       } 
      } 
     } 
    } 
} 

的問題是,日食的即將編譯錯誤的警告,其中上述參考com.sun.mail.imap.IMAPInputStream的代碼,即使的System.out.println(bp.getContent())返回上述代碼中的xml附件的com.sun.mail.imap.IMAPInputStream

+1

「eclipse不喜歡」不是對你的問題的詳細描述,也不太可能吸引別人的幫助 – JamesB

回答

1

您正在檢查它是否是com.sun.mail.imap.IMAPInputStream的一個實例,如果是,則您將投射到java.io.InputStream。所以,實際上,你應該測試的是如果它是java.io.InputStream的實例。這是演員取得成功所需要的。

不管是不是com.sun.mail.imap.IMAPInputStream都不重要,並且是一個實現細節。

+0

你的答案假設'com.sun.mail.imap.IMAPInputStream'可以可靠地轉換爲java.io .InputStream'。它適用於這種情況,但我不確定它有多普遍。 – CodeMed

+1

不可以。我的答案假定如果你投射到InputStream,那麼你就是做這個假設的人。如果你想測試一下是否有一個java.io.InputStream來確保轉換是安全的,那麼你應該使用'instanceof java.io.InputStream'。 –

1

當你的上下文沒有定義一個類時,你可以做一個getClass()。getName()和字符串比較你的預期結果,而不是一個instanceof。

+0

感謝您和+1加入有用的觀點。但是這並沒有讓我通過eclipse編譯錯誤警告。在這種情況下,getClass()。getName()只返回'com.sun.mail.imap.IMAPInputStream',顯然它可以轉換爲java.io.InputStream。 – CodeMed

+0

我不知道實際的課對你是否重要。我已經用奇怪的apis開發了哪些地方可以獲得課程,以及如何確定自己是否真的得到了預期的結果,但是在上下文中沒有課程。 –

0

有在你的代碼,這要問這是你真正想要做很重要,這樣許多假設...

許多許多不同種類的附件可以是XML格式的,你真的想處理所有這些?說什麼是「XML」比說它是「ASCII」稍微有點幫助。你期待什麼類型的XML數據,你想用它做什麼?

附件可能有也可能沒有名稱,XML格式的附件可能有也可能沒有以「.xml」結尾的文件名。

誰在發送您正在嘗試處理的消息?他們是否發送了我知道的另一個程序,它只發送帶有「.xml」文件名的XML文件?或者你是否試圖處理任何郵件程序發送的任何帶有任何附件的郵箱的任意郵件?

瞭解您真正想要做的事情將有助於我們推薦最佳解決方案。

+0

包含'xml'文件的電子郵件僅從使用已知電子郵件地址的其他應用程序發送。所有文件都將包含一個xml擴展名。 「xml」文件的內容將進行後續的下游處理,以解決您提出的問題。我正在努力保持每個問題的重點,以便我們可以保留堆棧溢出格式的完整性。 – CodeMed

+0

解釋更多的背景和要求將有助於保持問題的重點並避免提出這些澄清問題。 –

+0

在回答之前,這個問題已被其他人回答。您提交本帖子的內容都是問題,屬於原帖子下的評論。你還沒有提供這個問題的答案,所以你不應該點擊發布你提交的按鈕作爲答案。 – CodeMed