[xwiki-devs] [gsoc] Re: Problems creating a query using the QueryManager
Vincent Massol
vincent at massol.net
Mon Jul 28 13:02:59 CEST 2008
On Jul 28, 2008, at 12:53 PM, Thomas Mortagne wrote:
> On Mon, Jul 28, 2008 at 12:17 PM, Markus Lanthaler
> <mark_lanthaler at gmx.net> wrote:
>> Hi Ludovic,
>>
>> I just created a class OpenIDHelper which has a static method
>> findOpenIDUser(). That method is called in the already existent class
>> MyFormAuthenticator which I extended a bit. Shouldn't the component
>> manager
>> be set up already in that "context"? Do you need any other details?
>
> Yes i did not look close enough the stack trace. So I don't understand
> why this is not already initialized...
I think I know why: because the code doesn't work :)
The AbstractQueryManager should implement Composable.
I'm looking into it.
Thanks
-Vincent
>>> I think it's "prop.value =:identifier" (not ':identifier') otherwise
>>> hibernate will consider you use the value ":identifier" and will not
>>> replace it.
>>
>> OK Thomas, I fixed that. Thanks!
>>
>>
>> ----- Original Message -----
>> From: "Ludovic Dubost" <ludovic at xwiki.org>
>> To: "XWiki Developers" <devs at xwiki.org>
>> Sent: Monday, July 28, 2008 11:53 AM
>> Subject: [gsoc] Re: [xwiki-devs] Problems creating a query using the
>> QueryManager
>>
>>
>>>
>>> Hi Markus,
>>>
>>> Line 73 of AbstractQueryManager
>>>
>>> query = (Query) componentManager.lookup(Query.ROLE, language);
>>>
>>> Your componentManager is null.. This probably means that you have
>>> not
>>> activated the component manager from plexus properly.
>>> Probably Vincent can help, but he will probably need to know how you
>>> have build your code.
>>>
>>> Ludovic
>>>
>>> Markus Lanthaler wrote:
>>>> Hi,
>>>>
>>>> I'm currently implementing the last things to finish OpenID
>>>> authentication
>>>> support but I have some problems with the query manager. I'm
>>>> trying to
>>>> get
>>>> the document (should be only one) which an attached
>>>> OpenIdIdentifier
>>>> object
>>>> whose "identifier" string property's value has some specific
>>>> value. I
>>>> didn't
>>>> found any documentation apart
>>>> http://markmail.org/message/jt6m2huqr4r6hvk6
>>>> and
>>>> http://dev.xwiki.org/xwiki/bin/view/Design/XWiki+Query+Language+Specification
>>>> .
>>>>
>>>> I tried to achieve this by the following code:
>>>>
>>>> public static String findOpenIDUser(String openid_identifier,
>>>> XWikiContext context) throws XWikiException
>>>> {
>>>> XWiki xwiki = context.getWiki();
>>>>
>>>> QueryManager qm = xwiki.getStore().getQueryManager();
>>>> Query search_user;
>>>>
>>>> if (qm.hasLanguage(Query.HQL)) {
>>>> search_user =
>>>> qm.createQuery(", BaseObject as obj,
>>>> StringProperty as
>>>> prop
>>>> where doc.fullName = obj.name and obj.className =
>>>> 'XWiki.OpenIdIdentifier'
>>>> and obj.id=prop.id.id and prop.id.name='identifier' and
>>>> prop.value =
>>>> ':identifier'", Query.HQL);
>>>> } else if (qm.hasLanguage(Query.XPATH)) {
>>>> search_user =
>>>> qm.createQuery("/*/*[obj/XWiki/OpenIdIdentifier/@xp:identifier =
>>>> ':identifier'] ", Query.XPATH);
>>>> } else
>>>> throw new RuntimeException();
>>>>
>>>> search_user.bindValue("identifier", openid_identifier);
>>>>
>>>> List<XWikiDocument> found_users =
>>>> search_user.setLimit(1).execute();
>>>> if (found_users.size() > 0) {
>>>> if (log.isDebugEnabled()) {
>>>> log.debug("OpenID " + openid_identifier + " already
>>>> registered.");
>>>> }
>>>> return found_users.get(0).getFullName();
>>>> }
>>>>
>>>> return null;
>>>> }
>>>>
>>>>
>>>> but all I get is a NullPointerException when qm.createQuery(...,
>>>> Query.HQL)
>>>> is called. What's wrong with my code?
>>>>
>>>> java.lang.NullPointerException
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .store
>>>> .query.AbstractQueryManager.createQuery(AbstractQueryManager.java:
>>>> 73)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .user.impl.openid.OpenIDHelper.findOpenIDUser(OpenIDHelper.java:
>>>> 109)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .user
>>>> .impl
>>>> .xwiki.MyFormAuthenticator.processLogin(MyFormAuthenticator.java:
>>>> 201)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .user
>>>> .impl
>>>> .xwiki.MyFormAuthenticator.processLogin(MyFormAuthenticator.java:
>>>> 178)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .user
>>>> .impl
>>>> .xwiki.XWikiAuthServiceImpl.checkAuth(XWikiAuthServiceImpl.java:
>>>> 205)
>>>> at com.xpn.xwiki.XWiki.checkAuth(XWiki.java:3518)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .user
>>>> .impl
>>>> .xwiki
>>>> .XWikiRightServiceImpl.checkAccess(XWikiRightServiceImpl.java:139)
>>>> at com.xpn.xwiki.XWiki.checkAccess(XWiki.java:3526)
>>>> at com.xpn.xwiki.XWiki.prepareDocuments(XWiki.java:4432)
>>>> at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:190)
>>>> at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:115)
>>>> at
>>>> org
>>>> .apache
>>>> .struts
>>>> .action
>>>> .RequestProcessor.processActionPerform(RequestProcessor.java:431)
>>>> at
>>>> org
>>>> .apache
>>>> .struts.action.RequestProcessor.process(RequestProcessor.java:236)
>>>> at
>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:
>>>> 1196)
>>>> at
>>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:
>>>> 432)
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core
>>>> .ApplicationFilterChain
>>>> .internalDoFilter(ApplicationFilterChain.java:290)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
>>>> 206)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SavedRequestRestorerFilter
>>>> .doFilter(SavedRequestRestorerFilter.java:287)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core
>>>> .ApplicationFilterChain
>>>> .internalDoFilter(ApplicationFilterChain.java:235)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
>>>> 206)
>>>> at
>>>> com
>>>> .xpn
>>>> .xwiki
>>>> .web
>>>> .SetCharacterEncodingFilter
>>>> .doFilter(SetCharacterEncodingFilter.java:112)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core
>>>> .ApplicationFilterChain
>>>> .internalDoFilter(ApplicationFilterChain.java:235)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
>>>> 206)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.StandardContextValve.invoke(StandardContextValve.java:175)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina
>>>> .core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>>>> at
>>>> org
>>>> .apache
>>>> .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
>>>> at
>>>> org
>>>> .apache
>>>> .coyote.http11.Http11Processor.process(Http11Processor.java:844)
>>>> at
>>>> org.apache.coyote.http11.Http11Protocol
>>>> $Http11ConnectionHandler.process(Http11Protocol.java:583)
>>>> at
>>>> org.apache.tomcat.util.net.JIoEndpoint
>>>> $Worker.run(JIoEndpoint.java:447)
>>>> at java.lang.Thread.run(Thread.java:619)
More information about the devs
mailing list