Среди данных, отправляемых моим приложением сторонним SOA-сервером, являются сложные XML файлы. Владелец сервера предоставляет XML-схемы (.xsd
), и поскольку сервер отклоняет недопустимые XML-сообщения с помощью бессмысленного сообщения, мне нужно проверить их локально перед отправкой.
Я мог бы использовать автономный механизм проверки XML-схемы, но они медленные, в основном из-за времени, необходимого для анализа файлов схемы. Поэтому я написал свой собственный валидатор схемы (в Java, если это имеет значение) в виде HTTP-сервера, который кэширует уже разобранные схемы.
Проблема в том, что во время процесса проверки многие вещи могут пойти не так. Помимо неожиданных исключений и успешной проверки:
- сервер не может найти указанный файл схемы
- указанный файл не может быть допустимым файлом схемы
- XML недействителен в отношении файла схемы
Так как это HTTP-сервер, я бы хотел предоставить клиенту значимые коды состояния. Должен ли сервер отвечать с ошибкой 400 (неверный запрос) для всех вышеперечисленных случаев? Или они не имеют ничего общего с HTTP, и он должен ответить 200 с сообщением в теле? Любое другое предложение?
Обновление: основное приложение написано в Ruby, у которого нет хорошей библиотеки проверки схемы XML, поэтому отдельный сервер проверки не является чрезмерным.