2015-10-27 1 views
0

Я разрабатываю сервлет, который использует POST для отправки информации. Я получаю исключение в зависимости от того, где находится сервлет. Если я развернусь на локальном JBoss EAP 7, он работает как шарм. Но, если развернуть на удаленный сервер (JBoss EAP 7 тоже) я получаю следующее сообщение об ошибке:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException синтаксический разбор XML в POST (Java Servlet)

КОД

final InputStream is = new ByteArrayInputStream(xml); 
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); 

ОШИБКА

<message> 
Failed to load XML: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Byte no válido 2 de la secuencia UTF-8 de 4 bytes 

~ôJ뢺ÞjX³jwh•ªkyø«™§¬‚†Ú~*æiÊ+x„ÅÇ©¶*'ºè­©`zw«j¹Z~*æip(Ú½©Z </message> 

Для получения дополнительной информации сервлет имеет jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1"> 
    <deployment> 
    <dependencies> 
     <module name="javax.api"/> 
     <module name="org.apache.santuario.xmlsec"/> 
     <module name="org.apache.xerces" /> 
     <system export="true"> 
     <paths> 
      <path name="com/sun/org/apache/xerces/internal/dom"/> 
     </paths> 
     </system> 
    </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Где xerces libra Причастен. Я не понимаю, связана ли моя проблема с этим xml, или я должен изменить некоторую кодировку в коде сервера/сервлета. Thnaks заранее.

ответ

1

Badulake,
То, что вы делаете, похоже на проблему с кодировкой. Когда вы не укажете кодировку при преобразовании массива байтов в строку Java, JVM использует стандартную кодировку платформы. В большинстве случаев кодировка по умолчанию - utf-8, и это отлично работает. Однако я видел множество установок ОС, где кодировка - это просто US-ASCII.

Если это ваша проблема, вы можете установить кодировку по умолчанию как параметр JVM в командной строке Java или изменить кодировку на платформе utf-8.

+0

Спасибо, могли бы вы улучшить решение лучше? – Badulake

+0

Запустите команду «locale» в ваших системах на базе Unix, первая строка вывода должна указать вам кодировку по умолчанию. –

Смежные вопросы