at java.util.ResourceBundle.getBundle(ResourceBundle.java:950)
at org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator.buildMessage(ExceptionMessageGenerator.java:47)
at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:864)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:124)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:1183)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateServerSession(EntityManagerSetupImpl.java:1449)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:372)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:164)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:221)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:209)
at com.acme.peppo2.cmdb.client.CMDBClient.<init>(CMDBClient.java:17)
at com.acme.peppo2.cmdb.client.CMDBClient.main(CMDBClient.java:29)
Exception in thread "main" javax.persistence.PersistenceException: java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:417)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:164)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:221)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:209)
at com.acme.peppo2.cmdb.client.CMDBClient.<init>(CMDBClient.java:17)
at com.acme.peppo2.cmdb.client.CMDBClient.main(CMDBClient.java:29)
Caused by: java.lang.NullPointerException
at java.util.ResourceBundle.getBundle(ResourceBundle.java:950)
at org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator.buildMessage(ExceptionMessageGenerator.java:47)
at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:864)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:124)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:1183)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateServerSession(EntityManagerSetupImpl.java:1449)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:372)
... 5 more
EntityManagerSetupImpl.updateLogins():
String user = EntityManagerFactoryProvider.getConfigPropertyAsStringLogDebug("javax.persistence.jdbc.user", m, session);
String password = EntityManagerFactoryProvider.getConfigPropertyAsStringLogDebug("javax.persistence.jdbc.password", m, session);
if(user != null)
login.setUserName(user);
if(password != null)
login.setPassword(securableObjectHolder.getSecurableObject().decryptPassword(password));
so the JCEEncryptor failes miserably trying to unencrypt a password...
So I need to AES-encrypt mypassword :
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.eclipse.persistence.internal.helper.Helper;
public class AESEncryptor {
public static void main(String[] args) {
System.out.println(AESEncryptor.encryptPassword("mypassword"));
}
private static class Synergizer
{
private static SecretKey getAESMultitasker()
throws Exception
{
return new SecretKeySpec(Helper.buildBytesFromHexString("3E7CFEF156E712906E1F603B59463C67"), "AES");
}
private Synergizer()
{
}
}
public static String encryptPassword(String password)
{
try
{
Cipher encryptCipherAES = Cipher.getInstance("AES/ECB/PKCS5Padding");
encryptCipherAES.init(1, Synergizer.getAESMultitasker());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CipherOutputStream cos = new CipherOutputStream(baos, encryptCipherAES);
ObjectOutputStream oos = new ObjectOutputStream(cos);
oos.writeObject(password);
oos.flush();
oos.close();
return Helper.buildHexStringFromBytes(baos.toByteArray());
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
for i in 1..1000000000:
print "I hate Eclipse"
4 comments:
Thank you very much for this post; i'm trying to go through this since yesterday.
i used your AESEncryptor class to encrypt my password and i replace my password in the persistence.xml by the encrypted one but it does not work. i got this:
[EL Info]: 2012-05-03 10:35:01.153--ServerSession(20355494)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461
[EL Severe]: 2012-05-03 10:35:01.781--ServerSession(20355494)--[EL Severe]: 2012-05-03 10:35:01.781--ServerSession(20355494)--java.lang.NullPointerException
Exception in thread "main" javax.persistence.PersistenceException: java.lang.NullPointerException
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:517)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272)
at org.persistence.Main.main(Main.java:16)
Caused by: java.lang.NullPointerException
at java.util.ResourceBundle.getBundle(Unknown Source)
at org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator.getHeader(ExceptionMessageGenerator.java:95)
at org.eclipse.persistence.exceptions.EclipseLinkException.toString(EclipseLinkException.java:253)
at org.eclipse.persistence.logging.DefaultSessionLog.log(DefaultSessionLog.java:151)
at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3100)
at org.eclipse.persistence.internal.sessions.AbstractSession.logThrowable(AbstractSession.java:4293)
at org.eclipse.persistence.internal.sessions.AbstractSession.handleSevere(AbstractSession.java:4422)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:421)
at org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216)
at org.eclipse.persistence.sessions.server.ConnectionPool.startUp(ConnectionPool.java:504)
at org.eclipse.persistence.sessions.server.ServerSession.connect(ServerSession.java:484)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:633)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:208)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488)
... 5 more
it worked here...
make sure you also provide platform.oracle in the persistence.xml.
but honestly I am giving up on Eclipse JPA, it's simply too problematic.... I will use traditional javax.sql classes and hard code SQL. Eclipse = CRAP.
incidentally the NullPointerException in the getBundle needs some other fix... otherwise you can't see the error message.
Anyway I got so disgusted by Eclipse that I promised myself to steer away from it for some time.
try generating wlfullclient.jar and putting it in the classpath - after removing everything else...
http://www.javamonamour.org/2011/10/wlfullclientjar.html
Post a Comment