1

これまで、 ApacheWinkを使用して基本的なWebサービスをセットアップすることに成功しました。これには、提供されているサンプルに従って、Atom、JSON、HTML、XHTML、XML、およびプレーンテキストのメディアタイプを返すことが含まれます。また、MessageBodyWriterを使用して、XHTML出力を「手動で」生成することもできました。これまでのところ、素晴らしい。既存のウィンクメカニズムを介して、ほとんどのメディアタイプを返すことができてうれしいです。

私が今やろうとしているのは、返されたXHTMLコンテンツにJSPを使用させることです。つまり、JSPを出力テンプレートとして使用し、POJOをパラメーターとして送信してJSPのフィールドに入力したいと思います。以下は、私が今持っているもののいくつかの擬似コードです。

@Path("{id}")
@GET
@Produces({MediaType.APPLICATION_XHTML_XML})
public Response getXhtml( @PathParam("id") String id )
{
    try { 
        MyBean mybean = service.getBean(id);
        return Response.ok(new MyAsset(mybean))
                .location(new URI(baseurl+"Output.jsp"))
                .type(MediaType.APPLICATION_XHTML_XML).build();
    } catch ( Exception e ) {
        throw new WebApplicationException(e,Status.INTERNAL_SERVER_ERROR);
    }
}

JSPを完全に無視しているようです。そして、最終的にその方法を理解した場合、POJOをパラメーターとして渡す方法を知る必要があります。Apache WinkはJSPベースのWebサービスと相互運用できると思うので、ここで欠けているものがあることはわかっています。Winkのドキュメントは一般的に優れていますが、これについては何も見つかりませんでした。助けてくれてありがとう、理想的には実例へのリンク。

4

2 に答える 2

0

POJO をパラメーターとして渡す組み込みのメカニズムはありません。URI を自分で作成する必要があります。また、リダイレクトだけでなく、jsp にリダイレクトを送信したいと思います200 OK。したがって、次のようなことができます。

@Path("{id}")
@GET
@Produces({MediaType.APPLICATION_XHTML_XML})
public Response getXhtml( @PathParam("id") String id )
{
    try { 
        MyBean mybean = service.getBean(id);
        return Response.seeOther(UriBuilder.fromUri(baseurl+"Output.jsp")
                 .replaceQuery(convertMyBeanToQuery(mybean)).build())
                .type(MediaType.APPLICATION_XHTML_XML).build();
    } catch ( Exception e ) {
        throw new WebApplicationException(e,Status.INTERNAL_SERVER_ERROR);
    }
}

convertMyBeanToQueryクエリ文字列を作成するには、次のように実装する必要があります。key=value&key1=value

UriBuilder.queryPatamを使用して、パラメータを 1 つずつ追加することもできます。

于 2012-07-08T12:50:53.367 に答える
0

DefectAsset最後に、ウィンクの例を見て得たいくつかのアイデアをいじって解決策を見つけました。手がかりは、HtmlDescriptorWink の内部 API にあるクラスでした。

Bean を Asset のコンストラクター (つまり、" @Asset" アノテーションが付けられたクラス) の引数として提供し、Asset を Response のエンティティとして直接 JSP に渡します。

MyBean mybean = service.getBean(id);
return Response.seeOther(new URI(baseurl+"Output.jsp"))
        .entity(new MyAsset(bean))
        .type(MediaType.APPLICATION_XHTML_XML).build();

これには、MyAsset.java のメソッドが必要です。

@Produces({MediaType.APPLICATION_XHTML_XML})
public HtmlDescriptor getHtml()
{
    return new HtmlDescriptor(bean,"/Output.jsp","MyBeanPayload");
}

そして Output.jsp では、HtmlDescriptor のコンストラクターの 3 番目の引数として指定された属性名を介して Bean にアクセスします。

<%
  MyBean bean = (MyBean)request.getAttribute("MyBeanPayload");
  String id = bean.getId();
%>

JSP では、返された値を HTML フォームで使用しているため、Apache Commons Lang のStringEscapeUtils.escapeHtml()メソッドを使用してエスケープしています。?alt=application%2Fxhtml%2Bxml返される URI には、メディア タイプの指定に使用される" " が追加された RESTful パス以外は含まれません。

これは、Apache Wink を介して POJO を出力 JSP に渡す方法を示しているようです。

于 2012-07-09T03:48:00.397 に答える