6

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

どうもありがとうございました!

4

1 に答える 1