Ошибка преобразования JbossTextMessage Unicode в Linux

Я пытаюсь загрузить файл xml (UTF-8) и опубликовать его на Jboss MQ. При чтении файла из слушателя символы UTF-8 неправильно форматируются ТОЛЬКО в экземпляре Jboss (jboss-5.1.0.GA-3), работающем в Linux.

Например: BORÅS преобразуется в BORÅS в экземпляре Linux jboss.

Когда я копирую и настраиваю один и тот же экземпляр jboss для работы в Windows (SP3), он работает отлично.

Также я изменил настройку по умолчанию в Linux, включив JAVA_OPTS=-Dfile.encoding=UTF-8 в файлы .bashrc и run.sh.

внутри Listener JbossTextMessage.getText() приходит с неправильно указанным символом.

Любые предложения или обходные пути?


person isurux    schedule 13.08.2010    source источник
comment
Пожалуйста, предоставьте точную информацию о том, как вы загружаете файл.   -  person sorin    schedule 13.08.2010
comment
Я предоставил jsp для загрузки XML-файла с использованием метода post. Я буду получать файл как FormFile, используя распорки в классе Action следующим образом: FormFile file = theForm.getFile(); Во-вторых, я получаю данные файла в виде массива байтов byte[] buf = file.getFileData(); Наконец, я размещаю это в очереди в Jboss (jboss-5.1.0.GA-3).   -  person isurux    schedule 13.08.2010
comment
Процесс выглядит следующим образом: (1) Загрузите XML ---> (2) Получите байт [] из файла ---> (3) поместите его в очередь JMS ---> (4) выберите MDB для процесс. Когда отправленное сообщение получено от слушателя, я попытался передать его следующим образом, но не сработал: ((TextMessage) message).getText().getBytes(UTF-8)   -  person isurux    schedule 13.08.2010


Ответы (1)


Наконец-то я смог найти решение, НО решение все еще остается черным ящиком. Если у кого-то есть ответ на вопрос, ПОЧЕМУ это не удалось/успешно, пожалуйста, обновите тему.

Краткий обзор решения: 1. Сохранил содержимое файла в виде массива байтов и записал его в xml-файл в папке jboss tmp с помощью FileOutputStream.

  1. При публикации в очереди сообщений jboss я использовал явно написанный файл xml (1-й шаг), используя FileInputStream в качестве массива байтов, и передал его как тело сообщения.

Пример кода:

Просмотр: страница JSP с FormFile

Класс контроллера :UploadAction.java

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
   ...........

   writeInitFile(theForm.getFile().getFileData()); // Obtain the uploaded file

   Message msg = messageHelper.createMessage( readInitFile() ); // messageHelper is a customized factory method to create Message objects. Passing the newly    
   wrote file's byte array.

   messageHelper.sendMsg(msg); // posting in the queue

   ...........
}

private void writeInitFile(byte[] fileData) throws Exception{

   File someFile = new File("/jboss-5.1.0.GA-3/test/server/default/tmp/UploadTmp.xml");  // Write the uploaded file into a temporary file in jboss/tmp folder
   FileOutputStream fos = new FileOutputStream(someFile);

   fos.write( fileData );

   fos.flush();
   fos.close();     
}

private byte[]  readInitFile() throws Exception{

   StringBuilder buyteArray=new StringBuilder();

   File someFile = new File("/jboss-5.1.0.GA-3/test/server/default/tmp/UploadTmp.xml");  // Read the Newly created file in jboss/tmp folder

   FileInputStream fstream = new FileInputStream(someFile);

   int ch;
   while( (ch = fstream.read()) != -1){
        buyteArray.append((char)ch);
   }
   fstream.close();

   return buyteArray.toString().getBytes();   // return the byte []
}

Примечание: я думаю, что это как-то связано с типом сохранения файлов по умолчанию в Linux/Windows. например: Windows по умолчанию: ANSI.

person isurux    schedule 13.08.2010