Сравнение двоичных сообщений - PullRequest
0 голосов
/ 08 декабря 2010

Мы только что столкнулись с интересной проблемой, с которой мы сталкиваемся во время модульного тестирования потока ответа преобразования сообщения. Результатом этого потока является двоичный вывод (XML to NON XML), который помещается в очередь. Проблема, с которой мы сталкиваемся: Длина этого двоичного выходного сообщения не совпадает с длиной не-xml-данных, которые мы сохраняем как ожидаемый результат от средства тестирования формата MFL. Наш вывод заключается в том, что OSB внутренне применяет некоторую кодировку к этому сообщению, которое, по всей видимости, присутствует в UTF-8 в Proxy / Business Service. Поэтому мы изменили кодировку с ожидаемого на UTF-8, и тестовый пример прошел успешно. Но при тщательном расследовании было установлено, что UTF-8 по своей сути не представляет все данные правильно. Где бы ни была потеря данных, она обозначается знаком ‘? ' условное обозначение. Следовательно, наше сравнение неверно, даже если тестовый пример JUNIT проходит.

А также между ними есть MQ, который может иметь свою собственную кодировку, которую мы пока не можем исключить.

Мы можем придумать два решения этого: 1. Мы можем реализовать Сравнение путем преобразования ожидаемого и полученного значений в Byte [], чтобы избежать проблем с кодированием. Но мы не можем получить точную длину сообщения в выводе. 2. Мы можем кодировать как ожидаемый, так и полученный результат в общий формат кодирования, отличный от UTF-8, но мы не уверены, какой именно, а затем выполнить сравнение.

Есть идеи банды?

1 Ответ

0 голосов
/ 08 декабря 2010

Вероятно, вы не испытываете потери данных, когда смотрите на двоичные данные в кодировке UTF-8 и видите знак вопроса (?).Вероятность намного выше, если на вашем компьютере установлен неполный набор шрифтов, и нет символа, который бы отображал определенный символ Юникода, указанный в файле.Существует меньшая вероятность того, что ваша процедура преобразования двоичного кода в UTF-8 использует символ, в котором отсутствует глиф.

Если двоичные файлы не совпадают, вы должны были устранить проблему там.Скорее всего, один из двоичных файлов кодирует последовательность конца строки, последовательность конца файла, последовательность конца передачи или некоторый набор битов, который вводит программу в заблуждение, что она выполняется, когда на самом деле присутствует больше данных.1004 * Либо это, либо вы неправильно приводите двоичный файл в последовательность строк.Двоичные сравнения должны выполняться на байтовом уровне, а в Java нельзя принимать байты == символов.

...