Итак, в моем предыдущем посте я говорил о предложении разрешить использование 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; } } and package 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 Джерарда Дэвисона в блоге Джерарда Дэвисона .