いくつかの調査の後、私はなんとかこの問題を解決し、これをコミュニティと共有することを考えました.
wicket-1.5 で API が変更されたため、wicket-rest-api クラスに次の変更が必要です。
AbstractWebServicePage (またはフォークした場合は同等) は、IMarkupResourceStreamProvider を実装する必要があります。実装は次のようになります: (メーリングリストから取得)
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
{
return new StringResourceStream("");
}
「hasAssociatedMarkup」は非推奨になり、AbstractWebServicePage から削除できます。
AbstractWebServicePage のオーバーライドされた「onBeforeRender」内で定義されたコードを「onBeforeRenderPage」という名前のメソッドに移動します。このメソッドは wicket api の一部ではありませんが、この場合「onBeforeRender」が何らかの理由で呼び出されないため、私たちが作成したものであることに注意してください。
protected void onBeforeRenderPage()
{
HttpServletRequest servletRequest = (HttpServletRequest) getRequest().getContainerRequest();
HttpServletResponse servletResponse = (HttpServletResponse) getResponse().getContainerResponse();
String method = servletRequest.getMethod();
logger.debug("Received a {} request from {}:{}", new Object[]{method, servletRequest.getRemoteAddr(),
servletRequest.getRemotePort()});
if (POST.equals(method)) {
try {
setModelFromBody(getRequestBody());
} catch (Exception e) {
//swallow this exception
}
doPost(getPageParameters(), servletRequest, servletResponse);
} else if (GET.equals(method)) {
doGet(getPageParameters(), servletRequest, servletResponse);
}
}
それぞれのサブクラス (JSON、Xml など) で、メソッド "onRender()" を "renderPage()" に置き換え、他の処理を行う前にカスタム作成のスーパー メソッド "onBeforeRenderPage" を呼び出します。次のようになります。
@Override
public final void renderPage()
{
super.onBeforeRenderPage();
getResponse().write(getJson());
}
以上で、今度は wicket-1.5 を使用して、エレガントな wicket-rest API をもう一度楽しむ準備が整いました。
私はこれをテストして使用しています。
より良い意見があれば、共有してください。