arnaudroger / SimpleFlatMapper

Fast and Easy mapping from database and csv to POJO. A java micro ORM, lightweight alternative to iBatis and Hibernate. Fast Csv Parser and Csv Mapper
http://simpleflatmapper.org
MIT License
438 stars 76 forks source link

NPE during setup protobuf StringValue #765

Open lvitaly opened 3 years ago

lvitaly commented 3 years ago

Hello,

I tried to use sfm-jooq and sfm-converter-protobuf (v8.2.3) along with gRPC server generated by io.grpc:protoc-gen-grpc-java:1.39.0 and com.google.protobuf:protoc:3.17.2 (JVM 11). I got this exception.

java.lang.NullPointerException: null
        at com.google.protobuf.StringValue$Builder.setValue(StringValue.java:502)
        at com.google.protobuf.StringValue.of(StringValue.java:570)
        at org.simpleflatmapper.reflect.generated.com.google.protobuf.AsmInstantiatorStringValueFromStringIntovalue_I2.newInstance(Unknown Source)
        at org.simpleflatmapper.reflect.generated.com.google.protobuf.AsmInstantiatorStringValueFromStringIntovalue_I2.newInstance(Unknown Source)
        at org.simpleflatmapper.map.getter.InstantiatorContextualGetter.get(InstantiatorContextualGetter.java:18)
        at org.simpleflatmapper.map.getter.ContextualGetterBiFunction.apply(ContextualGetterBiFunction.java:65)
        at org.simpleflatmapper.reflect.generated.com.jl.grpc.AsmBiInstantiatorBuilderFromResultSetAndMappingContextIntocityAndiataAndicaoAndidAndnameAndCountryCodeIdAndPlaceId_Ic.newInstance(Unknown Source)
        at org.simpleflatmapper.reflect.generated.com.jl.grpc.AsmBiInstantiatorBuilderFromResultSetAndMappingContextIntocityAndiataAndicaoAndidAndnameAndCountryCodeIdAndPlaceId_Ic.newInstance(Unknown Source)
        at org.simpleflatmapper.map.mapper.AbstractMapper.map(AbstractMapper.java:22)
        at org.simpleflatmapper.map.mapper.ContextualSourceFieldMapperImpl.map(ContextualSourceFieldMapperImpl.java:38)
        at org.simpleflatmapper.map.mapper.JoinMapperEnumerable.next(JoinMapperEnumerable.java:40)
        at org.simpleflatmapper.map.mapper.AbstractEnumerableMapper.forEach(AbstractEnumerableMapper.java:33)
        at org.simpleflatmapper.jooq.SelectQueryMapper.asList(SelectQueryMapper.java:52)
        ... 6 common frames omitted

Issued from

    public Builder setValue(
        java.lang.String value) {
      if (value == null) {
    throw new NullPointerException();

On a high level, all looks fine. But is there a way to eliminate these null values from setup or is this a bug in the tool?

My code sample

  public CompletableFuture<Iterable<Airport>> getAirports() {
    return CompletableFuture.supplyAsync(() -> {
      final var mapper = SelectQueryMapperFactory
        .newInstance()
        .useAsm(false)
        .newMapper(Airport.class);

      final var select = ctx.select(
          AIRPORTS.ID,
          AIRPORTS.ICAO,
          AIRPORTS.NAME,
          PLACES.CITY
        )
        .from(AIRPORTS)
        .innerJoin(PLACES).on(AIRPORTS.PLACE_ID.eq(PLACES.ID));

      return mapper.asList(select);
    });
  }