Я пытаюсь использовать веб-сервис 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 заявляет, что не обрабатывает символ спецификации (см. Комментарии от anoynomous и halL 2 и 5 мая). http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments





Похоже, ColdFusion использует Apache Axis под прикрытием.
Это не относится именно к вашему решению, но мне уже приходилось сталкиваться с этой проблемой раньше, когда я использовал веб-службу .NET с Apache Axis / Java. Единственное решение, которое мне удалось найти (поскольку владелец веб-службы не желал ничего менять на своей стороне), было написать класс Handler, который Axis подключил бы к конвейеру, который удалял бы спецификацию из сообщения, если он существовал.
Так, возможно, можно настроить Axis через ColdFusion? Если так вы можете добавить дополнительные обработчики в поток обработки сообщений.
Я скажу, что ответ на ваш вопрос (возможно ли это?) - нет. Я не знаю это окончательно, но автор, который прокомментировал чуть выше halL (в комментариях на этой странице), дал обходной путь для проблемы, поэтому я предполагаю, что с этим можно справиться при синтаксическом разборе вручную.
Вы говорите, что используете CFInvoke, потому что не хотите самостоятельно разбираться с мыльной реакцией. Похоже, у тебя нет выбора.
Как уже сказал Адам Таттл, обходной путь находится на странице, на которую вы ссылаетесь
<!--- 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>
У меня такая же проблема с веб-сервисом Websphere 6.1.