2010-11-11 7 views
0

Je travaille sur une application qui peut envoyer des messages EDIFACT par mail. L'envoi et la réception de courrier ne pose aucun problème, la réception d'un message EDIFACT (envoyé par une autre application) fonctionne également.Créer un message javax.mail de type mime: application/EDIFACT

EDIFACT est une norme pour envoyer des affaires à l'information d'affaires (factures par exemple)

Le courrier a cette structure:

Message-ID: [email protected] 
From: EDI-berichten <[email protected]> 
Date: Wed, 10 Nov 2010 08:10:57 
To: <[email protected]> 
Subject: INVOIC;SRC 
MIME-VERSION: 1.0 
Content-type: application/EDIFACT; 
    name=message.edi 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; filename="message.edi" 
X-OriginalArrivalTime: 10 Nov 2010 07:13:29.0843 (UTC) FILETIME=[C6CCD430:01CB80A6] 
X-Virus-Scanned: clamav-milter 0.96.4 at pilot 
X-Virus-Status: Clean 

ici vous trouverez les spécifications EDIFACT: http://www.faqs.org/rfcs/rfc1767.html

Normalement vous envoyez une pièce jointe en créant un MimeMultipart et ajoutez un texte et une pièce attachée à ceci. Le message edifact n'a cependant pas de partie de message, juste la pièce jointe.

quand j'ajoute la partie de fixation au contenu, comme ceci:

MimeBodyPart attachBodyPart = new MimeBodyPart(); 
DataSource source = new FileDataSource(fileAttach); 
attachBodyPart.setDataHandler(new DataHandler(source)); 
attachBodyPart.setFileName(source.getName()); 
msg.setContent(attachBodyPart, "application/EDIFACT"); 

Je reçois cette erreur:

javax.mail.MessagingException: IOException while sending message; 
    nested exception is: 
    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/EDIFACT 
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:930) 

etc ... et enfin ceci:

Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/EDIFACT 
    at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:877) 
    at javax.activation.DataHandler.writeTo(DataHandler.java:302) 
    at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383) 
    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743) 
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:888) 

Est-ce que quelqu'un a de l'expérience dans la création d'un message comme celui-ci, ou comment créer un message dler pour une application de type/EDIFACT?

En recevant un message EDIFACT et enregistrer la pièce jointe que j'avais aussi le problème ce n'est pas de la manière par défaut pour enregistrer une pièce jointe, en utilisant:

mp = (Multipart)message.getContent(); 
BodyPart part = mp.getBodyPart(i); 
part.getInputStream() 

je devais utiliser ce lieu (ajouter cette info, parce que il pourrait être une avance à la solution):

SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent() 

** EDIT ** 18 mars 2013

la réponse minimale à ma question ici était une raison de le comprendre myse J'ai fini par en faire un projet open source. c'était déjà utile à certains développeurs.

donc un coup d'oeil: utiliser et faire plaisir commentaires à ce sujet: https://github.com/iamit/IAmEdifact

+0

IAm proche d'une solution. –

+0

Googling n'a pas obtenu de réponse, ni ce forum (pour l'instant): alors j'ai commencé un site pour ce genre de problème, où les gens peuvent trouver comment cela fonctionne: https://sites.google.com/site/edifact4java/home (basé sur mes propres recherches) –

Répondre

2

Hier très tard, je l'ai fini de travailler sur la solution du problème décrivaient ci-dessus. Je ne pouvais pas trouver une réponse correcte anyweher sur internet. Je créé une page avec des étapes de la façon de le faire (la documentation est pas tout à fait terminé, mais il sera bientôt)

Le site: https://sites.google.com/site/edifact4java/home

En bref, vous devez faire ceci:

  1. Ajouter un DHC (DataContentHandler) à la MailcapCommandMap
  2. Créer un DataContentHandler pour l'application de type MIME /EDIFACT
  3. Créer un MimePart personnalisé pour une application /EDIFACT
  4. Créer une DataHandler pour une interface fichier EDIFACT ou un message
  5. Créer un message pour les messages EDIFACT

Et mettre tout cela ensemble, et. .... Ça marche!!

Un long puzzle, c'est pourquoi je prends l'effort de le documenter sur un site. Espérons que quelqu'un, un jour peut faire son profit avec elle.

+0

Dommage que cette question et réponse soit marquée comme tumbleweed. A travers le site lié que j'ai créé pour celui-ci, j'ai reçu des e-mails avec des questions. Donc je sais que c'est très spécifique ... mais au moins ça aide certaines personnes. Donc si vous venez ici et trouvez la réponse sur mon site, votez pour ça! –

+0

Il ne s'agit donc pas d'un problème EDIFACT, mais de JavaMail. Bon vous l'avez résolu. –