Mar*_*rré 55 java xsd jersey wadl contract-first
我已经使用Jersey工作了几天的REST Web服务,并设法让所有CRUD操作工作,有几种交换格式:XML,JSON,Google Protobuf.
但是,我面临一些与自动生成的WADL和XSD相关的问题.
为了定义以这三种格式交换的对象,我遵循了"契约优先"的方法:
但是,由于我希望我的用户也能够生成他们的类,我想分享这些模式文件(.xsd和.proto)并将它们与自动生成的WADL很好地集成.
为此,感谢这个维基页面:
/schema/schema.xsd/schema/schema.proto我添加了一个应用程序语法文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<grammars xmlns="http://wadl.dev.java.net/2009/02"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xi="http://www.w3.org/1999/XML/xinclude">
<include href="../schema/schema.xsd" />
</grammars>
Run Code Online (Sandbox Code Playgroud)我添加了一个自定义的WADL生成器:
public class RichWadlGeneratorConfig extends WadlGeneratorConfig {
@Override
public List<WadlGeneratorDescription> configure() {
return generator(WadlGeneratorApplicationDoc.class)
.prop("applicationDocsStream", "application-doc.xml")
.generator(WadlGeneratorGrammarsSupport.class)
.prop("grammarsStream", "application-grammars.xml")
.descriptions();
}
}
Run Code Online (Sandbox Code Playgroud)这样,当我点击时,下面出现在WADL中/rest/application.wadl:
<grammars>
<include href="../schema/schema.xsd"/>
<include href="application.wadl/xsd0.xsd">
<doc title="Generated" xml:lang="en"/>
</include>
</grammars>
Run Code Online (Sandbox Code Playgroud)
/rest/application.wadl/xsd0.xsd是从我的课程自动生成的,但与我最初的课程有很大的不同schema.xsd.除此之外,调用像wadl2java这个WADL 这样的工具失败了,大概是因为
/schema/schema.xsd,和/rest/application.wadl/xsd0.xsd现在是冲突的(相同对象的两个定义).
有没有办法禁用这个自动生成的XSD的生成和传播?(因为我不需要它,因为我遵循这种"契约优先"的方法)
如果没有,有没有办法用我手动编写的XSD"覆盖"其内容/rest/application.wadl/xsd0.xsd?(我已经google了一下,发现了WadlResource,生成了定制的WADL,但没有发现XSD一代本身)
在此先感谢您的帮助!
M.
1)我向泽西岛队提出了问题并得到了答复:http: //java.net/projects/jersey/lists/users/archive/2012-06/message/8
2)根据帕维尔的指示,我提出了一张票(JERSEY-1230).我目前正在跟进自己提交修复或从泽西团队获得修复.
小智 1
1.14-SNAPSHOT应该允许您执行以下操作:
public class SampleWadlGeneratorConfig extends WadlGeneratorConfig {
@Override
public List<WadlGeneratorDescription> configure() {
return generator( WadlGeneratorApplicationDoc.class )
.prop( "applicationDocsStream", "application-doc.xml" )
.generator( WadlGeneratorGrammarsSupport.class )
.prop( "grammarsStream", "application-grammars.xml" )
.prop("overrideGrammars", true) // !!!
.generator( WadlGeneratorResourceDocSupport.class )
.prop( "resourceDocStream", "resourcedoc.xml" )
.descriptions();
}
}
Run Code Online (Sandbox Code Playgroud)
当 overrideGrammars 设置为 true 时,Jersey 生成的语法将不会包含在返回的 WADL 中。
| 归档时间: |
|
| 查看次数: |
6569 次 |
| 最近记录: |