JAX-RS с проверкой схемы - PullRequest
       13

JAX-RS с проверкой схемы

2 голосов
/ 13 сентября 2011

У меня есть служба 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 Ответ

2 голосов
/ 21 сентября 2011

Оказывается, что сервлет, который я использовал, не принимал конфигурацию 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>

Фрагмент моего applicationContext.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.

...