Dear All,

When Braintree connector was tested on ESB with Java SDK 1.6.0_22 all the
methods threw the following exception trace and failed.

[2014-08-29 16:42:09,415] ERROR - CreateTransaction java.io.IOException:
subject key, java.lang.NullPointerException
com.braintreegateway.exceptions.UnexpectedException: java.io.IOException:
subject key, java.lang.NullPointerException
at com.braintreegateway.util.Http.getSSLSocketFactory(Http.java:156)
at com.braintreegateway.util.Http.httpRequest(Http.java:80)
at com.braintreegateway.util.Http.post(Http.java:60)
at com.braintreegateway.TransactionGateway.sale(TransactionGateway.java:105)
at
org.wso2.carbon.connector.braintree.CreateTransaction.createTransaction(CreateTransaction.java:401)
at
org.wso2.carbon.connector.braintree.CreateTransaction.connect(CreateTransaction.java:75)
at
org.wso2.carbon.connector.core.AbstractConnector.mediate(AbstractConnector.java:32)
at
org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
at
org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:77)
at
org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)
at
org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:78)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
at
org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at
org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344
)
at
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:385)
at
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.security.cert.CertificateParsingException:
java.io.IOException: subject key, java.lang.NullPointerException

However the methods work perfectly fine when using Java SDK 1.7 and Open JDK
1.6 (on Linux machines).

It was also observed that the Braintree SDK works fine with direct calls
when using all Java 6 and 7 even 5.

The following method in the Braintree SDK is where the exception is being
thrown from.

Class com.braintreegateway.util.Http - 

private SSLSocketFactory getSSLSocketFactory() {
        try {
            KeyStore keyStore =
KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null);

            for (String certificateFilename : certificateFilenames) {
                CertificateFactory cf =
CertificateFactory.getInstance("X.509");
                InputStream certStream =
Http.class.getClassLoader().getResourceAsStream(certificateFilename);

                Collection<? extends Certificate> coll =
cf.generateCertificates(certStream); // This is the line which throws the
Exception
                for (Certificate cert : coll) {
                    if (cert instanceof X509Certificate) {
                      X509Certificate x509cert = (X509Certificate) cert;
                      Principal principal = x509cert.getSubjectDN();
                      String subject = principal.getName();
                      keyStore.setCertificateEntry(subject, cert);
                    }
                }
            }

            KeyManagerFactory kmf =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(keyStore, null);
            TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(keyStore);

            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init((KeyManager[]) kmf.getKeyManagers(),
tmf.getTrustManagers(), SecureRandom.getInstance("SHA1PRNG"));

            return sslContext.getSocketFactory();
        } catch (Exception e) {
            throw new UnexpectedException(e.getMessage(), e);
        }
    }

The following approaches were tried to resolve the issue which apparently
proved useless.
1.  Imported the Braintree API X509 certificate into wso2carbon.jks and to
client-truststore.jks.
2.  Imported the same into cacerts (jre\lib\security\cacerts)file when using
Java SDK 1.6.
3.  Tried installing OpenJDK 1.6 and ran the ESB using it. The connector
worked fine.
4.  Tried extracting the downloaded JCE jars to (jre\lib\security) folder.


Thanks,




--
View this message in context: 
http://wso2-oxygen-tank.10903.n7.nabble.com/Mutual-SSL-work-with-java-7-and-open-jdk-6-but-not-with-sun-java-6-tp102060.html
Sent from the WSO2 Development mailing list archive at Nabble.com.
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to