Re: Exception in SAXParserFactory.newInstance with 3.0M4

From: Jerald Dawson (jdawso..rk.com)
Date: Tue Jul 01 2008 - 14:02:09 EDT

  • Next message: Andrus Adamchik: "Re: Exception in SAXParserFactory.newInstance with 3.0M4"

    Ok, more info. I have been stepping through the code to see what is
    actually throwing the NPE and I've come to this code in DataSourceInfo
    class:

         public PasswordEncoding getPasswordEncoder() {
             PasswordEncoding encoder = null;

             try {
                 encoder = (PasswordEncoding) Thread
                         .currentThread()
                         .getContextClassLoader()
                         .loadClass(getPasswordEncoderClass())
                         .newInstance();
                 // encoder = (PasswordEncoding)
                 // Class.forName(getPasswordEncoderClass()).newInstance();
             }
    ...

    Now following the code, I notice that the getContextClassLoader call
    returns null which seems to be the source of the NPE. Is there a
    reason getContextClassLoader would be returning null?

    BTW, I'm using SWT if that is pertinent.

    -j

    On Jul 1, 2008, at 11:05 AM, Andrus Adamchik wrote:

    > Hmmm... I vaguely remember fixing that in M4 (i.e. making
    > "encoderClass", "passwordLocation", "passwordSource" attributes
    > optional). There was indeed a version of Cayenne that absolutely
    > required those attributes (M3?). Now I think it shouldn't. Can you
    > doublecheck the runtime version of cayenne-server.jar that causes
    > the NPE?
    >
    > Andrus
    >
    > On Jul 1, 2008, at 6:57 PM, Scott Anderson wrote:
    >
    >> To summarize, a NullPointerException in
    >> DataSourceInfo.getPasswordEncoder() is presumably caused by a missing
    >> encoderClass attribute in the driver.xml file, despite this field
    >> being
    >> specified with the modeler.
    >>
    >> Sounds to me like a candidate for a JIRA against the modeler.
    >>
    >> -----Original Message-----
    >> From: Jerald Dawson [mailto:jdawso..rk.com]
    >> Sent: Tuesday, July 01, 2008 11:52 AM
    >> To: use..ayenne.apache.org
    >> Subject: Fwd: Exception in SAXParserFactory.newInstance with 3.0M4
    >>
    >> Moving this to the list:
    >>
    >>
    >> Begin forwarded message:
    >>
    >>> From: Jerald Dawson <jdawso..rk.com>
    >>> Date: July 1, 2008 10:49:20 AM CDT
    >>> To: "Scott Anderson" <sanderso..irvana.com>
    >>> Cc: "Andrus Adamchik" <andru..bjectstyle.org>
    >>> Subject: Re: Exception in SAXParserFactory.newInstance with 3.0M4
    >>>
    >>> Thats interesting. Here is my drive.xml file:
    >>>
    >>> <?xml version="1.0" encoding="utf-8"?>
    >>> <driver project-version="3.0" class="com.mysql.jdbc.Driver">
    >>> <url value="jdbc:mysql://10.20.1.10/SystemRunner?
    >>> capitalizeTypenames=true"/>
    >>> <connectionPool min="1" max="1"/>
    >>> <login userName="systemrunner" password="*******"/>
    >>> </driver>
    >>>
    >>> As you can see, I do not have the encoderClass, passwordLocation and
    >>> passwordSource attributes in the login item. I'm going to try adding
    >>> those manually and see what happens. Again, this file was created
    >>> with Modeler.
    >>>
    >>> -j
    >>>
    >>> On Jul 1, 2008, at 10:30 AM, Scott Anderson wrote:
    >>>
    >>>> Judging from the stack trace, I'd guess that the encoderClass
    >>>> attribute
    >>>> of the login entity is invalid in the .driver.xml file. I'm not
    >>>> sure how
    >>>> that could happen if you created the file using the modeler. I'm
    >>>> copying
    >>>> Andrus on this, since he'll probably have a better understand of
    >>>> what's
    >>>> going on.
    >>>>
    >>>> Here's what my working driver.xml file looks like, for comparison:
    >>>>
    >>>> <?xml version="1.0" encoding="utf-8"?>
    >>>> <driver project-version="3.0" class="com.mysql.jdbc.Driver">
    >>>> <url value="jdbc:mysql://hostname/dbname"/>
    >>>> <connectionPool min="1" max="1"/>
    >>>> <login userName="user" password="pass"
    >>>> encoderClass="org.apache.cayenne.conf.PlainTextPasswordEncoder"
    >>>> passwordLocation="model" passwordSource="Not Applicable"/>
    >>>> </driver>
    >>>>
    >>>> -----Original Message-----
    >>>> From: Jerald Dawson [mailto:jdawso..rk.com]
    >>>> Sent: Tuesday, July 01, 2008 10:41 AM
    >>>> To: Scott Anderson
    >>>> Subject: Re: Exception in SAXParserFactory.newInstance with 3.0M4
    >>>>
    >>>> Ok, I removed all the jars from my classpath except for the ones
    >>>> specifically needed for cayenne and that seemed to fix my class
    >>>> problem. I've not dug into it yet to see what jar was specifically
    >>>> causing it but now when I run my app, it attempts to load the
    >>>> cayenne.xml file. However, its throwing an exception when it
    >>>> tries to
    >>>> load the user name and password thats stored in the xml files for
    >>>> access the mysql database. The exception is:
    >>>>
    >>>> ...
    >>>> Jul 1, 2008 9:32:24 AM
    >>>> org.apache.cayenne.conf.DriverDataSourceFactory
    >>>> $LoginHandler init
    >>>> INFO: loading user name and password.
    >>>> Jul 1, 2008 9:32:24 AM org.apache.cayenne.conf.RuntimeLoadDelegate
    >>>> shouldLoadDataNode
    >>>> INFO: Error: DataSource load failed
    >>>> java.lang.NullPointerException
    >>>> at
    >>>> org
    >>>> .apache
    >>>> .cayenne
    >>>> .conn.DataSourceInfo.getPasswordEncoder(DataSourceInfo.java:
    >>>> 207)
    >>>> at org.apache.cayenne.conf.DriverDataSourceFactory
    >>>> $LoginHandler.init(DriverDataSourceFactory.java:324)
    >>>> ...
    >>>>
    >>>> I've checked the xml files and the username and password are stored
    >>>> in
    >>>> the files. The model's password encoder is set to
    >>>> org.apache.cayenne.conf.PlainTextPasswordEncoder,
    >>>>
    >>>> Any help would be greatly appreciated. I feel like a newbie
    >>>> again. :-)
    >>>>
    >>>> -j
    >>>>
    >>>> On Jul 1, 2008, at 7:45 AM, Scott Anderson wrote:
    >>>>
    >>>>> You sure you have all of them? Ashwood, collections, lang,
    >>>>> logging,
    >>>>> and
    >>>>> velocity, in addition to the server jar and your mysql/j driver?
    >>>>> In my
    >>>>> experience, Cayenne generally fail how you describe when one of
    >>>>> the
    >>>>> non-server jars is missing.
    >>>>>
    >>>>> -----Original Message-----
    >>>>> From: Jerald Dawson [mailto:jdawso..rk.com]
    >>>>> Sent: Monday, June 30, 2008 4:36 PM
    >>>>> To: use..ayenne.apache.org
    >>>>> Subject: Re: Exception in SAXParserFactory.newInstance with 3.0M4
    >>>>>
    >>>>> Hi Andrus
    >>>>>
    >>>>> I'm using Eclipse 3.4 for development. I've added the cayenne jars
    >>>>> to
    >>>>> my classpath and I'm running my app inside eclipse.
    >>>>>
    >>>>> -j
    >>>>>
    >>>>> On Jun 30, 2008, at 3:07 PM, Andrus Adamchik wrote:
    >>>>>
    >>>>>>> Seems to be throwing a class not found exception but I can't be
    >>>>>>> sure since it just ungracefully terminates the app with not
    >>>>>>> stack
    >>>>>>> dump.
    >>>>>>
    >>>>>> This is unusual for a Java application. What type of
    >>>>>> application is
    >>>>>> that and how do you compile and run it?
    >>>>>>
    >>>>>> (and yes - SAX parser is part of JDK, and .. well, it just
    >>>>>> works).
    >>>>>>
    >>>>>> Andrus
    >>>>>>
    >>>>>>
    >>>>>> On Jun 30, 2008, at 10:55 PM, Jerald Dawson wrote:
    >>>>>>> Hello
    >>>>>>>
    >>>>>>> I'm new to cayenne (actually a webobjects guy) and I'm trying
    >>>>>>> to
    >>>>>>> get it working. I'm was able able to get modeler working and I
    >>>>>>> created a model for accessing a mysql database. Everything
    >>>>>>> seemed
    >>>>>>> pretty simple but now when I try to run my app that uses the
    >>>>>>> model,
    >>>>>>> when I call DataContext.createDataContext(), it terminates my
    >>>>>>> app.
    >>>>>>> I've poked around a bit and the crash is actually happening in
    >>>>>>> the
    >>>>>>> SAXParserFactory.newInstance method that is called during the
    >>>>>>> ConfigLoader initialization, specifically during the "parser =
    >>>>>>> Util.createXmlReader();" call. Seems to be throwing a class not
    >>>>>>> found exception but I can't be sure since it just ungracefully
    >>>>>>> terminates the app with not stack dump. Anyway, that kind of
    >>>>>>> puzzles me since my understanding was the all the SAX parser
    >>>>>>> stuff
    >>>>>>> came with java (I'm using 1.5 on Mac OS X 10.5). I thought it
    >>>>>>> might
    >>>>>>> be that it could be that it can't find my xml files but I tried
    >>>>>>> just hard coding the path to the cayanne.xml file and it still
    >>>>>>> does
    >>>>>>> not work. Any help would be appreciated.
    >>>>>>>
    >>>>>>> jerald dawson
    >>>>>>>
    >>>>>>>
    >>>>>
    >>>>
    >>>
    >>
    >>



    This archive was generated by hypermail 2.0.0 : Tue Jul 01 2008 - 14:03:10 EDT