Итак, в моем предыдущем посте я говорил о предложении разрешить использование 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
|
package jersey;import com.sun.jersey.api.wadl.config.WadlGeneratorConfig;import com.sun.jersey.api.wadl.config.WadlGeneratorDescription;import com.sun.jersey.wadl.generators.json.WadlGeneratorJSONGrammarGenerator;import java.util.List;public class JsonGeneratorConfig extends WadlGeneratorConfig { @Override public List configure() { return generator(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
|
<?xml version = '1.0' encoding = 'ISO-8859-1'?><web-app xmlns='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
|
package jersey;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;@Path('/echo')public class EchoResource { @GET @Produces('application/json') public EchoBean echo() { EchoBean bean = new EchoBean(); bean.setMessage('Hello'); return bean; } @POST @Consumes('application/json') @Produces('application/json') public EchoBean echo(EchoBean echo) { return echo; }}andpackage jersey;public class EchoBean { public EchoBean() { super(); } private String message; public void setMessage(String message) { this.message = message; } public String getMessage() { return message; }} |
Этот очень простой пример приводит к следующему 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
|
<?xml version = '1.0' encoding = 'UTF-8'?> <ns0:doc xmlns:ns1='http://jersey.java.net/' ns1:generatedBy='Jersey: 1.16-SNAPSHOT 11/19/2012 12:59 AM'/> <ns0:grammars/> <ns0:resource path='/echo'> <ns0:method id='echo' name='GET'> <ns0:response> <ns0:representation mediaType='application/json' xmlns:ns2='http://wadl.dev.java.net/2009/02/json-schema' ns2:describedby='application.wadl/echoBean'/> </ns0:response> </ns0:method> <ns0:method id='echo' name='POST'> <ns0:request> <ns0:representation mediaType='application/json' xmlns:ns3='http://wadl.dev.java.net/2009/02/json-schema' ns3:describedby='application.wadl/echoBean'/> </ns0:request> <ns0:response> <ns0:representation mediaType='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 Джерарда Дэвисона в блоге Джерарда Дэвисона .