ПРИМЕЧАНИЕ: Этот вопрос НЕ является DUPLICATE. Другой вопрос относится к InputStream
, в то время как этот вопрос является общим для JavaMail
вложений. Два ОЧЕНЬ различные вопросы. Удалите флаг.Преобразование приложения JavaMail в blob?
Вот этот вопрос:
Как использовать javamail
преобразовать файл, вложенный в сообщение электронной почты в persistable java.sql.blob
? В моем коде попытка ниже, eclipse
отладчик и SYSO
команд определить, что действительно есть xml
вложение, которое делает извергаются как InputStream
, но все же blob
и content
переменные остаются пустыми, несмотря на попытки Кодекса о передаче в InputStream
в них. Что я могу изменить для правильной передачи InputStream
в формат blob
?
for(int y=1;y<=msg_count;y++){
Message msg = inbox.getMessage(y);
System.out.println("msg# is: "+y);
Address[] in = msg.getFrom();
for (Address address : in) {System.out.println("FROM:" + address.toString());}
System.out.println("SENT DATE:" + msg.getSentDate());System.out.println("SUBJECT:" + msg.getSubject());
if(msg.getContent() instanceof String){System.out.println("msg.getContent()(String!) is: "+msg.getContent());}
if(msg.getContent() instanceof Multipart){
Multipart mp = (Multipart) msg.getContent();
for(int a=0;a<mp.getCount();a++){
BodyPart bp = mp.getBodyPart(a);
System.out.println("a, FILENAME (Multipart!) are: " +a+", "+ bp.getFileName());
System.out.println("a, CONTENTTYPE (Multipart!) are: "+a+", "+bp.getContentType());
if(bp.getFileName()!=null){
if(bp.getFileName().endsWith(".xml")){
System.out.println("a, CONTENT, class.name (Multipart!) are: " +a+", "+ bp.getContent()+", "+bp.getClass().getName());
if(bp.getContent() instanceof InputStream){
InputStream myis = (InputStream)bp.getContent();
DocumentPreImport docpre = new DocumentPreImport();
SomeDocument cd = mf.unmarshal(new StreamSource(myis), schemaFile);
docpre.setDocTitle(cd.getTitle());
List<IItempId> ids = cd.getTemplateId();
for(int u=0;u<ids.size();u++){docpre.setDocTemplateId(ids.get(0).getRoot());}
PatientRole pr = cd.getRecordTarget().get(0).getPatientRole();
docpre.setPatientRoleRoot(pr.getId().get(0).getRoot());
docpre.setPatientRoleExtension(pr.getId().get(0).getExtension());
Blob blob = null;
byte[] content = IOUtils.toByteArray(myis);
try {
blob = new SerialBlob(content);
docpre.setContent(blob);
}
catch (SerialException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
docpre.setSourceEmailAddress(msg.getFrom()[0].toString());
docpre.setMsgSentDate(msg.getSentDate().toString());
docpre.setMsgSubject(msg.getSubject());
docpre.setImported(false);
this.clinicService.saveDocPreImport(docpre);
}
}
}
}
}
msg.setFlag(Flags.Flag.DELETED, true);//flags this message as deleted, which does not yet fully expunge it from server
}
inbox.close(true);//expunges from server all the messages which were flagged as deleted. this line is required to actually delete.
@EJP Этот вопрос не является дубликатом. Удалите свой флаг. Другой вопрос специфичен для входного потока. Этот вопрос является общим для приложений JavaMail. Два очень разных вопроса. Пожалуйста, ответьте с подтверждением, что вы соответствующим образом удалили свой флаг. И, пожалуйста, ответьте на вопрос, если у вас есть ответ. – CodeMed