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.
внутри слушателя JbossTextMessage.getText() идет с неправильно указанным символом.
Есть предложения или обходные пути?
1 ответ
Наконец-то я смог найти решение, НО решение все еще остается в черном ящике. Если у кого-то есть ответ на вопрос, ПОЧЕМУ это не удалось / успешно, обновите ветку.
Краткий обзор решения: 1. Захватил содержимое файла в виде байтового массива и записал его в XML-файл в папке tmp jboss с помощью FileOutputStream
- При публикации в очередь сообщений 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 []
}
Foot Note: Я думаю, что это связано с типом сохранения файлов по умолчанию в Linux/Windows. Например: Windows по умолчанию: ANSI.