XML/ Ответ об ошибке: что такое стандарт?
Я поддерживаю библиотеку, которая обеспечивает доступ к XML/A через весь JavaScript: https://github.com/rpbouman/xmla4js
В основном это работает нормально, но я бы хотел улучшить обработку ошибок. Насколько я понимаю спецификацию XML/A, сообщения об ошибках принимают такую форму:
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>...</faultcode>
<faultstring>...</faultstring>
<faultactor>...</faultactor>
<detail>
...
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Тем не менее, я обнаружил, что по крайней мере для Mondrian (провайдер XML/A, с которым я больше всего знаком) <detail>
Элемент часто содержит бесценную информацию. Например, общий <faultcode>
элемент может сказать что-то общее, как "источник данных не найден", тогда как <detail>
элемент может содержать что-то вроде:
<XA:error xmlns:XA="http://mondrian.sourceforge.net">
<code>00HSBC01</code>
<desc>The Mondrian XML: MondrianOneToOneUserRoleListMapper.ERROR_001_ - Access is denied because the roles of this user don't correspond to any present in the Mondrian schema requested.</desc>
</XA:error>
Что указывает на более конкретное состояние.
Мой вопрос заключается в том, существует ли какая-то закономерность в ответе на ошибку других провайдеров XML/A, которую я могу использовать для наложения моего API и предоставления более качественных сообщений об ошибках пользователям моей библиотеки? Если вы не знаете о шаблоне, но можете предоставить только образцы провайдеров XML/A, к которым у вас есть доступ, это также приветствуется. Спасибо!
1 ответ
Вы можете скачать спецификацию Microsoft для протокола XMLA здесь: http://msdn.microsoft.com/en-us/library/ee320606.aspx (более семисот страниц).
В целом, существует два типа ошибок:
- Глобальные, которые либо препятствуют выполнению запроса, либо не дают серверу возвращать что-либо полезное (например, синтаксические ошибки),
- и локальные, например, в пределах одной ячейки ответа на запрос SELECT MDX, где возвращается общая структура результата. В этом случае объекты ошибок могут быть возвращены, например, в одной или нескольких ячейках вместо результата. Примером может служить ошибка, которая не позволяет серверу вычислить это конкретное значение ячейки, например ссылку на неизвестный элемент в определении вычисляемого элемента.