Приведенный ниже код представляет собой попытку упростить установку, необходимую для сжатия ExI и декомпрессию с использованием EXIficientпроблемы кодирования при извлечении EXI сжатого XML
class ExiCompressionUtils {
static Transformer transformer = TransformerFactory.newInstance().newTransformer()
static byte[] compress(String xml) {
ByteArrayOutputStream exiOS = new ByteArrayOutputStream()
EXIResult exiResult = new EXIResult(outputStream : exiOS)
XMLReader xmlReader = XMLReaderFactory.createXMLReader()
xmlReader.contentHandler = exiResult.handler
xmlReader.parse(new InputSource(new StringReader(xml)))
def compressed = exiOS.toByteArray()
exiOS.close()
return compressed
}
static String extract(byte[] compressed) {
SAXSource exiSource = new SAXSource(new InputSource(new ByteArrayInputStream(compressed)))
exiSource.setXMLReader(exiSource.reader)
ByteArrayOutputStream exiOS = new ByteArrayOutputStream()
transformer.transform(exiSource, new StreamResult(exiOS)) // fails here
def extracted = exiOS.toString()
exiOS.close()
return compressed
}
}
Ниже тест не пройден с ERROR: 'Invalid byte 1 of 1-byte UTF-8 sequence.'
@Test
void testExiCompression() {
def xml = '<Root><Child id="1">Text</Child><EmptyTag/></Root>'
def compressed = ExiCompressionUtils.compress(xml)
assert ExiCompressionUtils.extract(compressed) == xml
}
Какие-нибудь эксперты в области кодирования, которые могут понять это?
Я не могу понять: это реальный Java? Почему точки с запятой опущены? Что такое конструкция 'def compress ...'? – Andremoniy
Это Groovy ... достаточно близко, компилируется в .class файлы, в основном эквивалентные здесь. Я назвал его Java, потому что он мог бы просто быть простой Java, а не пару ярлыков, которые я взял с Groovy. В любом случае, они являются взаимозаменяемыми для большинства целей в эти дни. – jkschneider
@jkschneider Просто мысль, но есть файл тестового файла (который имеет XML), закодированный в * UTF-8 *? Я не очень разбираюсь в exi, но я видел эту ошибку раньше, и обычно это связано с кодировкой xml, не соответствующей * UTF-8 *. – BPaasch