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:[EMAIL PROTECTED]
Sent: Tuesday, July 01, 2008 11:52 AM
To: [email protected]
Subject: Fwd: Exception in SAXParserFactory.newInstance with 3.0M4
Moving this to the list:
Begin forwarded message:
From: Jerald Dawson <[EMAIL PROTECTED]>
Date: July 1, 2008 10:49:20 AM CDT
To: "Scott Anderson" <[EMAIL PROTECTED]>
Cc: "Andrus Adamchik" <[EMAIL PROTECTED]>
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:[EMAIL PROTECTED]
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:[EMAIL PROTECTED]
Sent: Monday, June 30, 2008 4:36 PM
To: [email protected]
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