我正在为以下问题苦苦挣扎几天。我在 SO、泽西邮件列表和一般网络中搜索了很多答案,但无法找到这个特定问题的答案。
设置问题域...
我在 Tomcat 7 中使用 Jersey 1.16。
我创建了一个简单的 JAX-RS 资源,如下所示:
@Path("/")
@Produces({ "application/xml", "text/plain" })
public class ExampleResource {
@GET
public List<Thing> getThings() {
List<Thing> list = new ArrayList<>();
list.add(new Thing("a thing 1", "a thing description 1"));
list.add(new Thing("a thing 2", "a thing description 2"));
return list;
}
}
Thing
是一个看起来像这样的 JAXB 注释 POJO
@XmlRootElement(name = "thing")
public class Thing {
private String name;
private String description;
// getters, setters and @XmlElement annotations ommited for brevity
我也配置了WadlGeneratorJAXBGrammarGenerator.class
当我要求它时,GET http://localhost:8092/rest
它就像一个魅力 - 返回格式良好的集合Thing
。
自动生成的 WADLhttp://localhost:8092/rest/application.wadl
几乎是完美的,它看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.16 11/28/2012 02:09 PM" />
<grammars>
<include href="application.wadl/xsd0.xsd">
<doc title="Generated" xml:lang="en" />
</include>
</grammars>
<resources base="http://localhost:8092/rest/">
<resource path="/">
<method id="getThings" name="GET">
<response>
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02"
xmlns="" element="thing" mediaType="application/xml" />
<representation mediaType="text/plain" />
</response>
</method>
</resource>
</resources>
</application>
就像我说的,几乎完美,这就是问题所在。
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02"
xmlns="" element="thing" mediaType="application/xml" />
WADL 没有描述/getThings
返回一个List<Thing>
. 相反,它看起来像是在thing
引用xsd0.xsd
. 因此,当我将它输入到 wadl2java 中时,它会生成无类型的客户端。为了得到一个List<Thing>
我必须手动编码它,比如
List<Thing> asXml = root().getAsXml(new GenericType<List<Thing>>(){});
有谁知道是否可以自动生成 WADL,以某种方式表明该特定资源正在返回特定类型的资源列表?
而且我不想创建额外的“ThingList”JAXB 注释类并将其返回到我的球衣资源中。
我几乎可以生成“完美”的 WADL,我缺少的正是这个(希望如此)小片段......
非常感谢!