JAX-RS с проверкой схемы
У меня есть служба RESTful с одним параметром пути и параметром, который не указывается в теле запроса. Параметр тела запроса - это XML, для которого у меня есть XSD. Я пытался проверить полезную нагрузку XML на XSD, но безрезультатно. Я пробовал следующее, как описано здесь:
<jaxrs:server address="/"
serviceClass="my.endpoint.class">
<jaxrs:schemaLocations>
<jaxrs:schemaLocation>classpath:schema/myschema.xsd</jaxrs:schemaLocation>
</jaxrs:schemaLocations>
</jaxrs:server>
Схемы находят (по крайней мере, ошибок нет), но то, что я ожидаю, чтобы быть недопустимым, не вызывает исключения. Параметры, которые не соответствуют содержимому XSD, поступают как нулевые. Это может быть неактуально, но мой автоматически сгенерированный класс полезной нагрузки имеет три атрибута, некоторые из которых являются обязательными.
Я кратко описал создание MessageBodyReader, как описано здесь, но я думаю, что у меня возникают проблемы с областью действия, и мой объект схемы недоступен при вызове readFrom.
Любая помощь или предложения будут с благодарностью!
1 ответ
Оказывается, что сервлет, который я использовал, не принимал конфигурацию jaxrs, показанную выше. Я изменил от использования этого:
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
к этому:
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<init-param>
<param-name>config-location</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
Фрагмент моего приложения Context.xml
<jaxrs:server address="/">
<jaxrs:schemaLocations>
<jaxrs:schemaLocation>classpath:schema/myschema1.xsd</jaxrs:schemaLocation>
<jaxrs:schemaLocation>schema/myschema2.xsd</jaxrs:schemaLocation>
<jaxrs:schemaLocation>schema/myschema3.xsd</jaxrs:schemaLocation>
</jaxrs:schemaLocations>
<jaxrs:serviceBeans>
<bean class="my.package.endPoint1" />
<bean class="my.package.endPoint2" />
</jaxrs:serviceBeans>
<jaxrs:features>
<cxf:logging />
</jaxrs:features>
</jaxrs:server>
Ссылки на схемы находятся в каталоге ресурсов, рядом с WEB-INF.