Java-код (SAX parser ) ведет себя по-разному в windows и UNIX почему ?
Привет,
Проблема -- & gt; На самом деле я столкнулся с проблемой синтаксического анализа xml (SAX Parser) в Unix-машине. Один и тот же Jar/Java-код ведет себя по-разному на машинах windows и Unix, почему ? :(
Windows Machine -- & gt; отлично работает, используя Sax Parser для загрузки огромного xml-файла, правильного чтения всех значений и заполнения одних и тех же значений. Charset. defaultCharset () windows-1252
Unix Machine -- & gt; После этого создал JAR и развернул в Unix -- & gt; tomcat и выполнил jar.
Попытался загрузить тот же огромный xml-файл, но заметил, что некоторые значения или символы заполняются пустыми или неполными, например
Название страны, населенной, как "ЯСИА" вместо "Малайзия" или дата проводки заполнение а "3 часов" вместо "18/09/2016 03:31:23 часов". Charset. defaultCharset () UTF-8
Проблема только с Unix, потому что, когда я загружаю тот же xml в windows или моем локальном eclipse, он работает нормально, и все значения заполняются правильно.
Кроме того, я попытался изменить свой код и установить кодировку как UTF-8 для inputSteamReader, но все равно он не читает значение правильно в Unix box.
Примечание: в xml нет специальных символов. Также заметил одну вещь, что когда я вынимаю те же записи (те значения, которые не заполнены правильно) в другой xml-файл и загружаю в unix-машину с тем же jar, он работает нормально. Это означает, что проблемы возникают при загрузке этих записей с огромными данными. :(
Пожалуйста, предложите, каким должно быть решение ?
Что я уже пробовал:
Я изменил кодировку на UTF-8, но до сих пор проблема не решена.
Richard MacCutchan
Скорее всего, в вашем коде есть ошибка. Вам нужно сделать некоторую отладку.
Member 12655706
public static void parseXmlDocument(String inputFilePath, обработчик ImplDefaultHandler) {
logger.info("начало: ImplBEUtils.parseXmlDocument() метод ");
SAXParserFactory saxParserFactory = SAXParserFactory. newInstance();
пробовать {
SAXParser saxParser = saxParserFactory.newSAXParser();
InputStream inputStream= новый FileInputStream(inputFilePath);
Reader reader = new InputStreamReader(inputStream, " UTF-8");
Методы фабрики имеет = новые методы фабрики(читатель);
is. setEncoding ("UTF-8");
saxparser.parse(is,(DefaultHandler) обработчик);
// saxParser.parse(новый файл(inputFilePath),(DefaultHandler) обработчик);
} catch (ParserConfigurationException e) {
System. out. println ("ошибка ParserConfig");
е.печатные();
} catch (SAXException e) {
Системы.из.код println("saxexception не : XML не хорошо сформированы");
е.печатные();
} catch (IOException e) {
Системы.из.код println("ошибка ввода-вывода ");
е.печатные();
}
logger.info("конец: ImplBEUtils.parseXmlDocument() метод ");
}
общественного недействительными endElement(строка s, строки S1, строковый элемент) бросает saxexception не {
if (element. equalsIgnoreCase ("transactionDate")) { obj.setTransactionDate(tmpValue); }
}
общественного недействительными символов(char[] ас, я инт, инт Дж) бросает saxexception не { символы.добавить(ас, I и J); tmpValue = новая строка(ас, I и J).отделка(); }
Member 12655706
Я опубликовал код, я не мог понять, есть ли ошибка в коде, то он должен был вести себя так же и в windows. Но в windows он прекрасно работает. :(
Проблема только с unix / docker машиной.
Может ли u pls предложить, если что-то не так в коде?