Я использую CXF для генерации интерфейса для клиента веб-службы .NET. Однако иногда, когда я пользуюсь клиентом, я получаю сообщение об ошибке:
WARNING: Interceptor for {http://xxxxxx.com}ChangeRequestWebService#{http://xxxxxx.com/ChangeRequestWebService}GetChangeRequestById has thrown exception, unwinding now
[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1b
at [row,col {unknown-source}]: [76,44]
Из многих других источников в Интернете очевидно, что это происходит потому, что веб-служба кодирует свой ответ в XML 1.1, в то время как мой клиент CXF читает этот ответ, ожидая XML 1.0, а специальный символ 0x1b недопустим в XML 1.0. Теперь я не хочу спорить о том, должна ли служба .NET использовать XML 1.1 в своем ответе, когда WSDL, очевидно, равен 1,0 (поскольку это спецификация). Я просто хочу иметь возможность читать то, что они отправляют без ошибок.
Рассматривая зависимости в клиенте CXF, они используют WoodStox 4.1.1, которая (с их сайта) явно поддерживает XML 1.1. Я хочу знать, есть ли способ настроить мой клиент CXF (через привязку во время wsdl2java или во время выполнения) для использования анализатора XML 1.1 при получении ответов? Все, что я могу найти, это люди говорят, что они не должны использовать 1.1 или фильтровать эти символы на стороне сервера. Обратите внимание, что я не могу фильтровать символы на стороне клиента, так как мне нужно отправить данные обратно на сервер, и проверка не удастся.
В качестве альтернативы, я полагаю, что служба .NET могла бы каким-то образом УКАЗАТЬ, что они используют XML 1.1 в своем ответе, но я не контролирую эту службу, поэтому было бы сложнее выяснить их проблему для их, а затем предложить, чтобы они это исправить. Кроме того, данные, которые они отправляют, находятся в БД, поэтому веб-служба не виновата в том, что в ней есть только символы XML 1.1.