Разбор JSON в проблеме JAVA с управляющими символами - PullRequest
0 голосов
/ 21 июня 2011

Я получаю через HTTP петицию JSON.При поступлении из Internet Explorer 8 синтаксический анализ завершается с исключением:

InPart inPart = mp.next();

MyClass myClass = inPart.getBody(MyClass.class, null);

com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 12))    at [row,col {unknown-source}]: [1,101]]

Соответствующий код:

InPart inPart = mp.next();

String s = inPart.getBody(String.class, null);

providers.getMessageBodyReader(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE).readFrom(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE, headers.getRequestHeaders(),
                new ByteArrayInputStream(s.getBytes())); // Tried with s.getBytes("UTF-8")

com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 12)) at [row,col {unknown-source}]: [1,101]

Более того, если я делаю:

String ss = s.replaceAll("\\p{Cntrl}", "");

ss.equals(s); // 

Выводtrue

длины одинаковы.

Я также пытался:

private String removeControlChar(String in) {
    StringBuilder sb = new StringBuilder();
    for (char c : in.toCharArray())
    {
        if(!Character.isISOControl(c)) {
            sb.append(c);
        }
        else
        {
            // To delete
            int i = 0;
        }
    }
    return sb.toString();
}

InPart inPart = mp.next();

String s = inPart.getBody(String.class, null);
Strign ss = removeControlChar(s);
providers.getMessageBodyReader(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE).readFrom(MyClass.class, null, null,
            MediaType.APPLICATION_JSON_TYPE, headers.getRequestHeaders(),
                new ByteArrayInputStream(ss.getBytes())); // Tried with s.getBytes("UTF-8")

Если я отлаживаюсь, неуспешный символ будет \f, как указано в исключении.Но ошибка говорит о том, что это недопустимый символ XML.Может ли это быть проблемой?

Есть идеи?Это только влияет на Internet Explorer.

Спасибо.

1 Ответ

0 голосов
/ 21 июня 2011

Я не удаляю этот вопрос на случай, если кто-нибудь попадет в такую ​​же проблему.

Проблема в том, что браузер отправляет путь, такой как C:\fakepath\, который во время выполнения и после преобразования в XML сообщает: \f.

Вы можете настроить это поведение в своем браузере.

Привет.

...