web-dev-qa-db-ja.com

変更されたバージョンのItemRequestForm.JavaをDSpaceバージョン6xで動作させる

以前はバージョン5xで機能していた_ItemRequestForm.Java_の変更バージョンがあります。 _item-view.xsl_で、クリックするとユーザーをこの変更されたフォームにリダイレクトするリンクを作成しました。このリンクのURLパターンは_http://example.com/documentdelivery/123456789/1234_です。 DSpaceのバージョンを6xにアップグレードすると、機能させるのが難しくなります。バージョン5と6の間の主要なコードのリファクタリングのため、コードを最新バージョンに移行するのは難しいと思います。

以下は、バージョン5xで機能するコードの一部ですDocumentDeliveryForm.Java

コードは主にこの回答に基づいています: DSpaceのフィードバックページの変更されたバージョンから参照ページ(アイテム)のタイトルを取得するにはどうすればよいですか?

_    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = HandleManager.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");
_

バージョン6にアップグレードしたところ、DSpaceObject dso = HandleManager.resolveToObject(context, handle)が機能しなくなったことがわかったため、DSpaceObject dso = handleService.resolveToObject(context, handle)に置き換えました。

以下は、私の5xコードを6xに移行する私の試みです(結果:Java.lang.NullPointerException)

_    String handle=parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    Request request = ObjectModelHelper.getRequest(objectModel);
    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");
_

以下は、ハンドルがnullになる別の試みです

_    Request request = ObjectModelHelper.getRequest(objectModel);
    String handle = request.getParameter("handle");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    if (!(dso instanceof Item)) {
        return;
    }
    boolean firstVisit=Boolean.valueOf(request.getParameter("firstVisit"));

    Item item = (Item) dso;

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");
_

Javaスタックトレースを見ると、次のコード行を指しています:DSpaceObject dso = handleService.resolveToObject(context, handle)handleが読み込まれていません。

_http://example.com/documentdelivery/123456789/1234_から_http://example.com/handle/123456789/1234_にユーザーを正常にリダイレクトできるように、コードのどの部分を変更する必要がありますか?

アイテムビューアの分割の正しい構成はどれですか。

_    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            request.getRequestURI() + "/documentdelivery/" + item.getHandle(), Division.METHOD_POST,"primary");
_

[〜#〜]または[〜#〜]

_    Division documentdelivery = body.addInteractiveDivision("DocumentDelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle","unknown"),Division.METHOD_POST,"primary");
_

前もって感謝します。

5
euler

最後に、なんとかそれを機能させることができました。ここにも以前の投稿に基づいて他のメタデータフィールドを表示しました DSpace 6xのItemRequestFormで他のメタデータを取得

public void addBody(Body body) throws SAXException, WingException,
        UIException, SQLException, IOException, AuthorizeException
{
    Request request = ObjectModelHelper.getRequest(objectModel);

    // Build the item viewer division.
    Division documentdelivery = body.addInteractiveDivision("documentdelivery-form",
            contextPath+"/documentdelivery/"+parameters.getParameter("handle", "unknown"),Division.METHOD_POST,"primary");

    documentdelivery.setHead(T_head);

    String handle = parameters.getParameter("handle","unknown");
    DSpaceObject dso = handleService.resolveToObject(context, handle);
    Item item = (Item) dso;

    String citationDC = itemService.getMetadataFirstValue(item, "dc", "identifier", "citation", org.dspace.content.Item.ANY);
    String titleDC = item.getName();
    String title = "";
    if (citationDC != null && citationDC.length() > 0) {
        title = citationDC;
    } else {
        if (titleDC != null && titleDC.length() > 0)
            title = titleDC;
    }
    documentdelivery.addPara(title);

必要なインポートも追加しました:

import org.dspace.content.service.ItemService;
import org.dspace.handle.factory.HandleServiceFactory;
import org.dspace.handle.service.HandleService;

そしてまた私はこれらを追加しました:

    private final transient ItemService itemService = ContentServiceFactory.getInstance().getItemService();
    private final transient HandleService handleService = HandleServiceFactory.getInstance().getHandleService();
1
euler