Спецификация не ожидается в CF, но отправлена ​​IIS / SharePoint - PullRequest
2 голосов
/ 11 сентября 2008

Я пытаюсь использовать веб-сервис 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 дополнительно включает символ BOM (http://unicode.org/faq/utf_bom.html#29).. Microsoft почти всегда включает символ BOM с кодированными потоками 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

Ответы [ 3 ]

2 голосов
/ 11 сентября 2008

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

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

2 голосов
/ 16 сентября 2008

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

<!--- 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>
0 голосов
/ 11 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...