質問

Adobe API ドキュメントで、多くのクエリ オプションの URL によって呼び出すことができる QueryBuilder サービスを見てきました。これは JSON ベースの応答を返します。非常によく。これをJava APIで使用したいと考えています。いくつかの例を見つけてEclipseで試しましたが、以下のコードのようにサービス「スリング」を取得する方法がわかりません。または、言い換えると、QueryBuilder Java オブジェクトを作成する方法。

必要な特定の JAR があるか、PC に Apache SLING をインストールする必要があります。CQ5 は初めてで何もわからないので、これを共有できる人が役に立つかわかりません。

コード例は以下のとおりです。

        Repository repository = JcrUtils.getRepository(SERVER);
        SimpleCredentials credentials = new SimpleCredentials(USERNAME, PASSWORD.toCharArray());
        Session session = repository.login(credentials);
        System.out.println("got session: " + session);

        /*HERE SLING IS THE PROBLEM HOW TO GET SLING */  
        QueryBuilder qbuilder = sling.getService(QueryBuilder.class);
        String fulltextSearchTerm = "Geometrixx";

        // create query description as hash map (simplest way, same as form
        // post)
        Map<String, String> map = new HashMap<String, String>();

        // create query description as hash map (simplest way, same as form
        // post)
        map.put("path", "/content");
        map.put("type", "cq:Page");
        map.put("group.p.or", "true"); // combine this group with OR
        map.put("group.1_fulltext", fulltextSearchTerm);
        map.put("group.1_fulltext.relPath", "jcr:content");
        map.put("group.2_fulltext", fulltextSearchTerm);
        map.put("group.2_fulltext.relPath", "jcr:content/@cq:tags");

        // can be done in map or with Query methods
        map.put("p.offset", "0"); // same as query.setStart(0) below
        map.put("p.limit", "20"); // same as query.setHitsPerPage(20) below

        Query query = qbuilder.createQuery(PredicateGroup.create(map), session);
        query.setStart(0);
        query.setHitsPerPage(20);

        SearchResult result = query.getResult();
役に立ちましたか?

解決

JSP ではなく Java クラスで作業している場合は、次を使用できます。 @Reference 特定のサービスを検索するためのアノテーション。これにより、OSGi によって登録された一致するサービスが見つかり、その実装が返されます。

から Felix SCR ドキュメント:

@Reference Annotationは、サービスコンポーネントランタイムによってコンポーネントに利用可能になった他のサービスへの参照を定義します。

コードは次のように単純になります。

@Reference
QueryBuilder qbuilder;

他のヒント

これは、Adobe CQ OSGi Magic ...を使用して実現できます。クラスにプライベートフィールドを追加して、ComponentContextを保持します。

private ComponentContext context;
.

起動方法を実装する:

protected void activate(ComponentContext context) {
    this.context = context;
}
.

その後、このコンテキストを使用してQueryBuilderを取得できます。

ServiceReference queryBuilderReference = context.getBundleContext().getServiceReference(QueryBuilder.class.getName());
QueryBuilder queryBuilder = (QueryBuilder) context.getBundleContext().getService(queryBuilderReference);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top