Pregunta

Estoy trabajando en una aplicación que puede enviar mensajes EDIFACT por correo. El envío y recepción de correo electrónico no es un problema, la recepción de un mensaje EDIFACT (Enviar por otra aplicación) funciona tan bien.

EDIFACT es un estándar para enviar negocio a la información empresarial (por ejemplo, facturas)

El correo tiene esta estructura:

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

Aquí puede encontrar las especificaciones EDIFACT: http://www.faqs.org/rfcs/ rfc1767.html

Normalmente se envía un archivo adjunto mediante la creación de un MimeMultipart y añadir un texto y una parte adjuntar a este. El mensaje EDIFACT sin embargo, no tiene una parte del mensaje, sólo el adjunto.

cuando agrego la parte de unión con el contenido, como este:

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

Me sale este error:

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 ... y finalmente esto:

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)

¿Alguien tiene alguna experiencia en la creación de un mensaje como éste, o cómo crear un controlador de mensajes para un tipo como application / EDIFACT?

En la recepción de un mensaje EDIFACT y guardar el archivo adjunto que también tenía el problema no está en la forma predeterminada para guardar un archivo adjunto, usando:

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

he tenido que utilizar este lugar (la adición de esta información, ya que podría ser una ventaja a la solución):

SharedByteArrayInputStream sbaIs = (SharedByteArrayInputStream)message.getContent()

** EDITAR 18 de mar 2013 **

La respuesta mínima a mi pregunta aquí era una razón de averiguarlo myselve, y al final me hizo un Porject de código abierto. ya era muy útil para algunos desarrolladores.

Así que echar un vistazo: el uso y la retroalimentación por favor en él: https://github.com/iamit/IAmEdifact

¿Fue útil?

Solución

Ayer muy tarde tengo trabajo terminada en la solución del problema anterior pueda describirse. No pude encontrar una respuesta adecuada anyweher en Internet. Así que creé una página con los pasos de cómo hacer esto (documentación no está terminado del todo, pero será pronto)

El sitio: https://sites.google.com/site/edifact4java/home

En resumen, usted tiene que hacer esto:

  1. Añadir un DHC (DataContentHandler) a la MailcapCommandMap
  2. Crea una DataContentHandler para el tipo mime application / EDIFACT
  3. Crea una MimePart personalizado para application / EDIFACT
  4. Crea una DataHandler para un archivo o edifact mensaje
  5. Crear un mensaje interfaz para mensajes EDIFACT

Y poner todo esto junto, y funciona ..... !!

Una larga rompecabezas, por eso me tomo el esfuerzo de documentar en un sitio. Es de esperar que alguien, algún día puede hacer su / sus ganancias con él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top