Question

Je travaille sur une application qui peut envoyer des messages EDIFACT par la poste. L'envoi et la réception de courrier a pas de problème, la réception d'un message EDIFACT (envoi par une autre application) fonctionne aussi bien.

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

Le courrier a cette structure:

Message-ID: 20101110081058.CLOCKT..SRC.SRCNUMBER.edi01@SENDER.DOMAIN.com
From: EDI-berichten <edi01@SENDER.DOMAIN.com>
Date: Wed, 10 Nov 2010 08:10:57
To: <ekt@DOMAIN.nl>
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

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

Normalement, vous envoyer une pièce jointe en créant un MimeMultipart et ajouter un texte et une partie attacher à ce sujet. Le message EDIFACT cependant, ne fait pas 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)

Quelqu'un at-il une expérience dans la création d'un message comme celui-ci, ou comment créer un gestionnaire de messages pour un type comme application / EDIFACT?

En recevant un message EDIFACT et enregistrer la pièce jointe, j'ai eu 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, car 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 myselve, et à la fin je l'ai fait une porject open source. il était déjà utile à certains développeurs.

Alors jetez un oeil: utilisation et commentaires à ce sujet s'il vous plaît: https://github.com/iamit/IAmEdifact

Était-ce utile?

La solution

Hier j'ai très tard fini de travailler sur la solution du problème ci-dessus correct de. Je ne pouvais pas trouver un anyweher de bonne réponse sur Internet. Donc, j'ai 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) à le MailcapCommandMap
  2. Créer un DataContentHandler pour le type MIME application / EDIFACT
  3. Créer un MimePart personnalisé pour application / EDIFACT
  4. Créer un DataHandler pour un fichier EDIFACT ou message
  5. Créer un message interface pour les messages EDIFACT

Et mettre tout cela ensemble, et cela fonctionne ..... !!

Un long casse-tête, voilà pourquoi je prends l'effort documentation sur un site. Espérons que quelqu'un, un jour peut faire son / son profit avec elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top