Загрузка rds-комбинированный-ca-bundle.pem.из папки ресурсов в AWS лямбда-Java - PullRequest
1 голос
/ 22 марта 2019

Пытаюсь загрузить «rds-комбинированный-ca-bundle.pem» для подключения DocumentDB от AWS Lambda, он получает файл при запуске тестовой лямбды из eclipse, потому что файл находится в корне каталога. Но при загрузке jar в консоль AWS, так как файл функций Lamdba находится на ресурсе floder и протестируйте его. Получение исключения NULL-указателя.

java.lang.NullPointerException
at com.adp.hyperx.documentdb.LambdaFunctionHandler.createCertificate(LambdaFunctionHandler.java:156)
at com.adp.hyperx.documentdb.LambdaFunctionHandler.createKeyStoreFile(LambdaFunctionHandler.java:144)
at com.adp.hyperx.documentdb.LambdaFunctionHandler.setSslProperties(LambdaFunctionHandler.java:131)
at com.adp.hyperx.documentdb.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:64)
at com.adp.hyperx.documentdb.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:46)
at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:178)
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:293)
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)




private static X509Certificate createCertificate() throws Exception 
     {
        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
    // System.out.println(ClassLoader.class.getResourceAsStream("rds-combined-ca-bundle.pem"));
     Path path = Paths.get(ClassLoader.class.getResource("/").toURI());
    System.out.println("path" + path);
    Path resourceLocation = path.resolve("rds-combined-ca-bundle.pem");
    System.out.println("resourceLocation" + resourceLocation);
     URL url = resourceLocation.toFile().toURI().toURL();
    // URL url = new File(SSL_CERTIFICATE).toURI().toURL(); --this one reads the file from root floder
     if (url == null) {
        throw new Exception();
      }
      try (InputStream certInputStream = url.openStream()) {
        // FileInputStream input = new FileInputStream(file);
        return (X509Certificate) 
     certFactory.generateCertificate(certInputStream);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

  }

Я использовал тот же код, что и RDS, но для БД документа https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.Java.html для класса IAMDatabaseAuthenticationTester

Заранее спасибо

1 Ответ

1 голос
/ 18 апреля 2019

В моем случае я сохраняю файл в папке ресурсов, и ниже работает:

ClassLoader.getSystemClassLoader().getResource("rds-combined-ca-bundle.pem")
...