aws - java8 - Невозможно десериализовать экземпляр java.lang. Строка из токена START_OBJECT - PullRequest
1 голос
/ 01 ноября 2019

java newbie.

Я скомпилировал с java 8

javac HelloWorld.java --release 8

и загрузил скомпилированный файл как лямбда-код aws.

Почему я получаюошибка, когда я запускаю ее в aws lambda?

public class HelloWorld
{
    public static void main(String[] args)
    {   
        System.out.println("Hello, World");
    }   
}

Ошибка

An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: lambdainternal.util.NativeMemoryAsInputStream@ae45eb6; line: 1, column: 1]
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: lambdainternal.util.NativeMemoryAsInputStream@ae45eb6; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы упускаете что-то фундаментальное здесь. Вы не можете просто бросить файл класса или jar в Lambda. Существует четкий интерфейс между сервисом Lambda и вашим кодом. Подумайте об этом так: Lambda запускает JVM, а Lambda сама реализует класс Java со статическим методом main (в своем коде, а не в вашем коде) и выполняет его. Этот main метод в конечном счете вызовет точку входа вашей сконфигурированной лямбда-функции. Я бы рекомендовал этот Hello World учебник .

1 голос
/ 01 ноября 2019

AWS Lambda предоставляет ограниченное время выполнения Java для выполнения обработчиков AWS Java Lambda. Ограничения логичны, например, доступ к файловой системе и т. Д. В целях безопасности, поскольку код выполняется в общей многопользовательской среде. Чтобы выполнить программу, ваш класс должен реализовать интерфейс RequestHandler и реализовать метод handleRequest. Вот образец из официальной документации

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Hello implements RequestHandler<Integer, String>{
  public String handleRequest(Integer myCount, Context context) {
    return String.valueOf(myCount);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...