次の問題で数日間苦労しています。ここ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を生成することでほとんどそこにいます。私が見逃しているのは、この(うまくいけば)小さな部分です...
どうもありがとうございました!