Итак, в моем предыдущем посте я говорил о предложении разрешить использование JSON-Schema в WADL, в этом посте рассказывается о том, как заставить это работать с недавней сборкой Jersey. Вам нужно будет скачать / ссылаться на 1.16SNAPSHOT, пока не выйдет 1.16.
Если вы используете Maven, это должно быть довольно просто для обновления ваших зависимостей, если у вас уже есть jersey и jersey-json. Вам просто нужно добавить зависимость от артефакта ‘jersey-wadl-json-schema’ из группы ‘com.sun.jersey.contribs’, чтобы получить новую функцию.
Если вы находитесь за пределами Maven, проще всего загрузить последнюю версию архива jersey-jar, а затем jar-jad-json-schema . Способ их развертывания зависит от конкретного инструмента, но если вы используете WLS, вот несколько конкретных замечаний о том, как обновить версию Jersey.
Как только у вас это заработает, вам нужно создать класс WadlGeneratorConfig, чтобы включить это новое поколение грамматики:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | packagejersey;importcom.sun.jersey.api.wadl.config.WadlGeneratorConfig;importcom.sun.jersey.api.wadl.config.WadlGeneratorDescription;importcom.sun.jersey.wadl.generators.json.WadlGeneratorJSONGrammarGenerator;importjava.util.List;publicclassJsonGeneratorConfig extendsWadlGeneratorConfig {    @Override    publicList               configure() {        returngenerator(WadlGeneratorJSONGrammarGenerator.class).descriptions();    }} | 
Это может быть зарегистрировано различными способами, вот пример использования параметра init сервлета. Также обратите внимание, что для упрощения этого примера мы используем отображение POJO Джерси; но во время написания этого блога я заметил, что этот параметр влияет на формат JSON-версии WADL, если вы попробуете это.
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xmlversion= '1.0'encoding= 'ISO-8859-1'?><web-appxmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'         xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'         version='3.0'>  <servlet>    <servlet-name>jersey</servlet-name>    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>    <init-param>      <param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>      <param-value>jersey.JsonGeneratorConfig</param-value>    </init-param>    <init-param>      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>      <param-value>true</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>jersey</servlet-name>    <url-pattern>/resources/*</url-pattern>  </servlet-mapping></web-app> | 
Поэтому я собрал действительно простой эхо-сервис, просто чтобы убедиться, что все это работает:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | packagejersey;importjavax.ws.rs.Consumes;importjavax.ws.rs.GET;importjavax.ws.rs.POST;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;@Path('/echo')publicclassEchoResource {    @GET    @Produces('application/json')    publicEchoBean echo() {        EchoBean bean = newEchoBean();        bean.setMessage('Hello');        returnbean;    }    @POST    @Consumes('application/json')    @Produces('application/json')    publicEchoBean echo(EchoBean echo) {        returnecho;    }}andpackagejersey;publicclassEchoBean {    publicEchoBean() {        super();    }    privateString message;    publicvoidsetMessage(String message) {        this.message = message;    }    publicString getMessage() {        returnmessage;    }} | 
Этот очень простой пример приводит к следующему WADL со ссылками на элементы JSON-Schema:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xmlversion= '1.0'encoding= 'UTF-8'?>   <ns0:docxmlns:ns1='http://jersey.java.net/'ns1:generatedBy='Jersey: 1.16-SNAPSHOT 11/19/2012 12:59 AM'/>   <ns0:grammars/>      <ns0:resourcepath='/echo'>         <ns0:methodid='echo'name='GET'>            <ns0:response>               <ns0:representationmediaType='application/json'xmlns:ns2='http://wadl.dev.java.net/2009/02/json-schema'ns2:describedby='application.wadl/echoBean'/>            </ns0:response>         </ns0:method>         <ns0:methodid='echo'name='POST'>            <ns0:request>               <ns0:representationmediaType='application/json'xmlns:ns3='http://wadl.dev.java.net/2009/02/json-schema'ns3:describedby='application.wadl/echoBean'/>            </ns0:request>            <ns0:response>               <ns0:representationmediaType='application/json'xmlns:ns4='http://wadl.dev.java.net/2009/02/json-schema'ns4:describedby='application.wadl/echoBean'/>            </ns0:response>         </ns0:method>      </ns0:resource>   </ns0:resources></ns0:application> | 
URI application.wadl / echoBean содержит это простое определение JSON-схемы:
| 1 2 3 4 5 6 7 8 9 | {    'type': 'object',    'properties': {        'message': {            'type': 'string'        }    },    'name': 'echoBean'} | 
Теперь в текущем проекте есть ряд ограничений, не в последнюю очередь то, что сгенерированная схема не учитывает никаких настроек записи . Но я подумал, что этого будет достаточно, чтобы спровоцировать обратную связь о том, будет ли эта функция полезна вообще. По-видимому, растет интерес к JSON-Schema как в сети, так и внутри Oracle, поэтому было бы интересно посмотреть, станет ли это описание более распространенным.
Ссылка: создание JSON-схемы в Джерси от нашего партнера по JCG Джерарда Дэвисона в блоге Джерарда Дэвисона .