Проблема с собственным изображением в Quarkus и MongoPanache - PullRequest
0 голосов
/ 13 января 2020

У меня проблема при создании собственного образа quarkus и я пытаюсь использовать mon go panache запрос. Если я использую профиль разработчика или создаю обычный jar, все работает.

Вот мой Dockerfile.native


## Stage 1 : build with maven builder image with native capabilities
FROM quay.io/quarkus/centos-quarkus-maven:19.2.1 AS build
COPY backend /usr/src/app/backend
COPY frontend /usr/src/app/frontend
COPY pom.xml /usr/src/app/
USER root
RUN chown -R quarkus /usr/src/app
USER quarkus
RUN cd /usr/src/app/ && mvn clean package -Pnative -Dnative-image.xmx=4g
RUN mkdir -p /tmp/ssl-libs/lib \
  && cp /opt/graalvm/jre/lib/security/cacerts /tmp/ssl-libs \
  && cp /opt/graalvm/jre/lib/amd64/libsunec.so /tmp/ssl-libs/lib/

## Stage 2 : create the docker final image
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY --from=build /usr/src/app/backend/target/*-runner /work/application
COPY --from=build /tmp/ssl-libs/ /work/
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0", "-Djava.library.path=/work/lib", "-Djavax.net.ssl.trustStore=/work/cacerts"]
 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (vert.x-worker-thread-1) HTTP Request to /api/budget failed, error id: 86ff4366-b0d2-49c5-87f7-e6eee9d71feb-1: org.jboss.resteasy.spi.UnhandledException: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class domain.Budget.
    at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:106)

У кого-нибудь была подобная проблема?

РЕДАКТИРОВАТЬ

домен (Период и Категория также имеют констрасторы по умолчанию)

@MongoEntity(collection = "Budget")
public class Budget {

    private ObjectId id;
    private Period period;
    private List<Category> categories;

    public Budget() {
        period = new Period();

        categories = new ArrayList<>();
    }

//business method getter setters...

}

хранилище

@ApplicationScoped
public class BudgetRepository implements PanacheMongoRepository<Budget> {

}

контроллер

    @GET
    @Path("/budget")
    @Produces("application/json")
    public Response budget() {
        Budget budget = repository.listAll().get(0);

        return Response.ok(budget).build();
    }

1 Ответ

0 голосов
/ 15 января 2020

GraalVM native-image должен знать, какие классы должны быть доступны для улучшения. Поскольку в вашей конечной точке REST используется тип возврата Response, Quarkus не может автоматически отразить ваш класс Budget, поэтому для этого нужно использовать аннотацию @RegisterFroReflection.

Существует PR, который это сделает для вас, поэтому вам больше не нужно будет делать это самостоятельно: https://github.com/quarkusio/quarkus/pull/6326/files

Но пока это не объединено, вам нужно добавить аннотацию @RegisterFroReflection в ваш Budget класс.

...