Спецификация, не ожидаемая в CF, но отправленная IIS / SharePoint

StackOverflow https://stackoverflow.com/questions/56812

Вопрос

Я пытаюсь использовать веб-сервис SharePoint из ColdFusion через cfinvoke (потому что я не хочу иметь дело с (читать:проанализируйте) сам ответ SOAP).

Ответ SOAP включает символ с указанием порядка байтов (BOM), который создает следующее исключение в CF:

"Cannot perform web service invocation GetList.
The fault returned when invoking the web service operation is:
'AxisFault
faultCode: {http://www.w3.org/2003/05/soap-envelope}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog."

Стандарт кодировки UTF-8 опционально включает символ спецификации (http://unicode.org/faq/utf_bom.html#29).Microsoft почти повсеместно включает символ спецификации в потоки в кодировке UTF-8 .Из того, что я могу сказать, нет никакого способа изменить это в IIS.Анализатор XML, который JRun (ColdFusion) использует по умолчанию, не обрабатывает символ спецификации для XML-потоков в кодировке UTF-8.Итак, похоже, что способ исправить это - изменить анализатор XML, используемый JRun (http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942).

Adobe заявляет, что она не обрабатывает символ спецификации (см. Комментарии анойномоуса и Холла от 2 и 5 мая).
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

Это было полезно?

Решение

Я собираюсь сказать, что ответ на ваш вопрос (возможно ли это?) - нет.Я не знаю этого окончательно, но плакат, который комментировал чуть выше, был (в комментариях на этой странице) дал обходной путь для этой проблемы - поэтому я предполагаю, что с ней можно справиться при разборе вручную.

Вы говорите, что используете CFInvoke, потому что не хотите самостоятельно разбираться с ответом soap.Похоже, у тебя нет никакого выбора.

Другие советы

Как уже сказал Адам Таттл, обходной путь находится на странице, на которую вы ссылаетесь

<!--- Remove BOM from the start of the string, if it exists --->
<cfif Left(responseText, 1) EQ chr(65279)>
<cfset responseText = mid(xmlText, 2, len(responseText))>
</cfif>

Похоже, ColdFusion использует Apache Axis под прикрытием.

Это не совсем применимо к вашему решению, но мне уже приходилось сталкиваться с этой проблемой однажды, когда я использовал веб-службу .NET с Apache Axis / Java.Единственное решение, которое я смог найти (поскольку владелец веб-сервиса не желал ничего менять со своей стороны), состояло в том, чтобы написать класс-обработчик, который Axis подключил бы к конвейеру, который удалил бы спецификацию из сообщения, если бы она существовала.

Так, возможно, можно настроить Axis через ColdFusion?Если это так вы можете добавить дополнительные обработчики в поток обработки сообщений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top