Frage

I Am an einer Anwendung arbeiten, die EDIFACT-Nachrichten per E-Mail senden kann. Das Senden und Empfangen von E-Mail ist kein Problem, eine EDIFACT-Nachricht (Senden von einer anderen Anwendung) Empfangen funktioniert auch.

EDIFACT ist ein Standard Business to Business-Informationen (Rechnungen zum Beispiel) senden

Die E-Mail hat folgende Struktur:

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

Hier können Sie die EDIFACT-Spezifikationen finden: http://www.faqs.org/rfcs/ rfc1767.html

Normalerweise Sie eine Anlage senden, indem Sie einen MimeMultipart Erstellen und fügen Sie einen Text und ein anhängen Teil dazu bei. Die EDIFACT-Nachricht jedoch keinen Nachrichtenteil hat, nur die Anlage.

, wenn ich das Befestigungsteil zum Inhalt hinzufügen, wie folgt aus:

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

ich diesen Fehler:

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 ... und schließlich folgt aus:

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)

Hat jemand keine Erfahrung in eine Nachricht wie diese erstellen, oder wie ein Message-Handler für einen Typen wie Anwendung erstellen / EDIFACT?

eine EDIFACT-Nachricht beim Empfangen und Speicher der Anlage hatte ich auch das Problem, es ist nicht in dem Standard-Weg, um eine Anlage zu speichern, mit:

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

Ich hatte diese stattdessen zu verwenden (diese Informationen hinzufügen, weil es sich um eine Leitung zu der Lösung sein könnte):

SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent()

** EDIT 18. März 2013 **

Die minimale Reaktion auf meine Frage war hier ein Grund, um es herauszufinden, myselve, und am Ende habe ich es eine Open-Source porject. es war bereits einige Entwickler nützlich.

hat also einen Blick: Einsatz und bitte Feedback dazu: https://github.com/iamit/IAmEdifact

War es hilfreich?

Lösung

Gestern sehr spät habe ich fertige Arbeit an der Lösung des Problems descibed oben. Ich konnte keine richtige Antwort anyweher im Internet finden. Also habe ich eine Seite mit Schritten, wie dies zu tun (Dokumentation nicht ganz fertig ist, aber es wird bald)

Die Website: https://sites.google.com/site/edifact4java/home

Kurz gesagt, Sie haben, dies zu tun:

  1. Fügen Sie einen DHC (DataContentHandler) zu die MailcapCommandMap
  2. a erstellen DataContentHandler für den MIME-Typ application / EDIFACT
  3. a erstellen Mimepart angepasst für application / EDIFACT
  4. a erstellen Datahandler für eine EDIFACT-Datei oder Nachricht
  5. Erstellen Sie eine Nachricht Schnittstelle für EDIFACT-Nachrichten

Und setzen alle diese zusammen, und ..... es funktioniert !!

Ein langes Puzzle, das ist, warum ich die Mühe, es auf einer Website zu dokumentieren. Hoffentlich jemand, ein Tag kann es sein / ihren Gewinn machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top