HttpServletRequest InputStream dañado?

Estoy recibiendo un mensaje SOAP sobre un servlet java con una parte adjunta que contiene un mimo multiparte. Haciendo esto:

 InputStream inputStream = request.getInputStream();           
 byte[] data = IOUtils.toByteArray(inputStream);

 File file = new File("/usr/local/user/message.txt");
 FileOutputStream fos = new FileOutputStream(file);
 fos.write(data);
 fos.close();

Me da datos corruptos para el código binario en el mimo multiparte. Alguien sabe por qué está pasando esto? Copié los datos binarios a un archivo y cambié la extensión del archivo a la extensión de imagen apropiada, pero obtengo una imagen corrupta. La comparación de datos hexadecimales de message.txt y un archivo .snoop muestra que existen ligeras diferencias en los datos hexadecimales que causan la distorsión. No hubo cambios en los datos ASCII. Gracias.

Hay distorsión, ya que puede ver que la imagen se ve correcta al principio, pero comienza a parecer extraña después de un tiempo porque los valores hexadecimales son incorrectos. Por ejemplo: 06 04 04 04 04 04 06 04 04 06 0a del cliente se convierte en 06 04 04 04 04 04 06 04 04 06 0D después de hacer lo anterior.

Respuesta 1

Según los comentarios, parece que el archivo se está escribiendo correctamente en el disco (esa es mi interpretación).

WinSCP se utiliza para transferir el archivo desde la máquina (Linux / Unix) a una máquina con Windows. El modo de transferencia empleado en el proceso de transferencia podría hacer que WinSCP convierta todas las terminaciones de línea de estilo Unix en terminaciones de línea de estilo Windows, o viceversa, dependiendo de dónde se originó la transferencia. Esto ocurre cuando se utiliza el modo de texto para transferir el archivo, o cuando se permite a WinSCP determinar si debe usar el modo de texto o binario para transferir el archivo. Es posible que lo haya configurado en el modo predeterminado, así que fuerce la transferencia del archivo en binario; Si esto no ha funcionado, deberá investigar más a fondo.

Si WinSCP parece ser la causa de este problema, puede confirmarlo al ver el contenido binario de los archivos en ambas plataformas. Puede usar xxd en Linux / Unix. En Windows, una de las utilidades enumeradas en esta pregunta ayudará.

También puede usar cualquier otro protocolo de copia de archivos como FTP, SFTP o incluso usar NFS o Samba para transferir los archivos, y establecer WinSCP como la causa.

Respuesta: 2

Estaba tratando de obtener datos de una base de datos MySQL usando la utilidad Spring ResultSetExtractor, pero obtuve la siguiente excepción: Excepción en el hilo "main" org.springframework.beans.factory ...

Estoy tratando de usar HTMLunitdriver en eclipse. He escrito WebDriver driver = new HtmlUnitDriver (); Todos los archivos jar se agregan en la ruta de compilación, pero recibo el error "controlador HTMLunit ...

Tengo un problema con mi JAXB <element name = "create"> <complexType> <sequence> <element name = "name" type = "string"> </element> </ secuencia & ...

Estoy aprendiendo cómo crear controladores lógicos en los servicios web JAX-WS SOAP. Aquí estoy tratando de obtener los datos de la carga útil y quiero imprimirlos para probarlos. Pero estoy teniendo problemas. Aquí está mi ...