Domanda

Ho visto in Adobe API Documentation Querybuilder Service che può essere chiamato da URL per molte opzioni di query, questo restituisce risposte basate su JSON.Ottimo.Io wan per usarlo in API Java.Ho trovato alcuni esempi e ho provato in eclissi, ma qualche cosa non so che come ottenere il servizio "sling" come nel codice specificato qui sotto: o in altre parole come creare un oggetto Java di querybuilder.

Qualsiasi barattolo specifico di cui avevo bisogno o ho bisogno di installare Apache Sling sul mio PC Non sono sicuro che qualcuno che possa condividere questo sarà utile come sono nuovo a CQ5 e non ha idea.

Il codice di esempio è il seguente:

        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();
.

È stato utile?

Soluzione

Se stai lavorando in una classe Java piuttosto che a un JSP, puoi usare l'annotazione @Reference per fare una ricerca di un determinato servizio - questo troverà un servizio di abbinamento registrato da OSGI e restituire un'attuazione di te.

Dal Felix SCRDocumentazione :

.

L'annotazione @reference definisce i riferimenti ad altri servizi effettuati Disponibile per il componente da parte del runtime del componente del servizio.

Il tuo codice diventa quindi semplicemente:

@Reference
QueryBuilder qbuilder;
.

Altri suggerimenti

Questo può essere raggiunto utilizzando Adobe CQ OSGI Magic ... Aggiungi un campo privato nella tua classe per tenere il componenteContext.

private ComponentContext context;
.

Implementare il metodo Attiva:

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

Quindi puoi usare questo contesto per ottenere il querybuilder:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top