Вопрос

Я видел в документации Adobe API Querybuilder Service, которая может быть вызвана URL для многих вариантов запроса, это возвращает ответы на основе JSON.Очень хорошо.Я хочу использовать это в Java API.Я нашел несколько примеров и попробовал в затмении, но я не знаю, как получить услугу «слинг» как в данном коде ниже: или другими словами, как сделать QueryBuilder Java Object.

Любой конкретный банок, который мне нужен, или мне нужно установить 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();
.

Это было полезно?

Решение

Если вы работаете в классе Java, а не на JSP, вы можете использовать аннотацию @Reference, чтобы сделать подразумевание данной услуги - это найдет соответствующий сервис, зарегистрированный OSGI, и вернуть его к вам.,

из

от felix scrДокументация :

Аннотация @Reference определяет ссылки на другие услуги доступно для компонента сервисной компонентной средой выполнения.

Ваш код тогда становится просто:

@Reference
QueryBuilder qbuilder;
.

Другие советы

Это может быть достигнуто с помощью Adobe CQ OSGI Magic ... Добавить личное поле в своем классе, чтобы удерживать компонентContext.

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