2017-09-01 2 views
1

J'ai un problème lors du dézippage xml signé et il est modifié.Contenu du texte xml dézippé

client a envoyé ce XML:

<DatoAdicional> 
     <Codigo>03</Codigo> 
     <Valor>: REGULARIZACI�N DEL VALOR FACTURADO*: DEBE SER: 30.29*: VALOR FACTURADO: 30.00*</Valor> 
    </DatoAdicional> 

Mais quand unziping nous obtenons (il est modifié):

<DatoAdicional> 
    <Codigo>03</Codigo> 
    <Valor>: REGULARIZACI???N DEL VALOR FACTURADO*: DEBE SER: 30.29*: VALOR FACTURADO: 30.00*</Valor> 
</DatoAdicional> 

Le problème est que quand il unziped à l'intérieur de la jetée du serveur, car lorsque ce zip est unziped avec un client Java il est décompressé avec succès. Mon code Java est:

public static List<ZipContent> getXml(DataHandler file) throws IOException { 
    ZipInputStream zis = null; 
    List<ZipContent> zipContents = new ArrayList<>(); 
    try { 
     zis = new ZipInputStream(file.getInputStream()); 
     for (ZipEntry ze = zis.getNextEntry(); ze != null; ze = zis.getNextEntry()) { 
      if (!ze.isDirectory()) { 
       byte[] buffer = new byte[1 << 11]; 
       ByteArrayOutputStream byteArrayOs = new ByteArrayOutputStream(); 
       int len; 
       while ((len = zis.read(buffer)) > 0) { 
        byteArrayOs.write(buffer, 0, len); 
       } 
       ZipContent zc = new ZipContent(); 
       zc.setFileName(ze.getName()); 
       zc.setXml(new String(byteArrayOs.toByteArray())); 
       zipContents.add(zc); 
      } 
      zis.closeEntry(); 
     } 
     zis.close(); 
     return zipContents; 
    } catch (IOException e) { 
     throw e; 
    } 
} 

Hepl me s'il vous plaît.

+1

Vous ne savez pas comment/pourquoi la jetée correspond à cette question. Rien dans votre code d'exemple n'utilise quoi que ce soit dans la spécification ou la jetée de servlet. –

+0

Parce que cette méthode décompresser bien quand est l'appel d'un autre client alors je pense que cela pourrait être à cause de Jetty –

Répondre

1

new String(byteArrayOs.toByteArray()) crée une chaîne dans un tableau d'octets en utilisant le codage par défaut du système. Sur les systèmes Windows, cela est très probablement le cas. cp1252 (sur les systèmes allemands, le vôtre peut varier). Je ne connais pas la classe ZipContent, mais vous pouvez soit définir les octets au lieu de le convertir en texte ou utiliser le jeu de caractères correct en utilisant par exemple. new String(byteArrayOs.toByteArray(), "utf8")

+0

Mi application est sur le serveur centos. Je l'ai fait le changement, mais j'ai encore l'erreur semblable, maintenant, nous obtenons: \t \t \t \t \t \t \t \t \t \t \t \t : REGULARIZACI N DEL VALOR FACTURADO *: DEBE SER: 30,29 *: VALOR FACTURADO: 30,00 * \t \t \t \t \t

+0

J'étais tellement malade à ce problème que j'ai changé la jetée pour une autre nouvelle (la même version), et maintenant e Tout est OK. Je ne sais toujours pas pourquoi j'ai eu ce problème. –