azure-functions-java-worker icon indicating copy to clipboard operation
azure-functions-java-worker copied to clipboard

Try binding to EventData

Open pragnagopa opened this issue 6 years ago • 1 comments

pragnagopa avatar Mar 04 '19 02:03 pragnagopa

EventHubs library is part of the lib folder: javafunctionlib

lib folder is part of default class path.

Binding to eventdata fails with:

Exception: UnsupportedOperationException: Interface can't be instantiated! Interface name: com.microsoft.azure.eventhubs.EventData
Stack: java.lang.RuntimeException: Unable to invoke no-args constructor for interface com.microsoft.azure.eventhubs.EventData. Registering an InstanceCreator with Gson for this type may fix this problem.
[3/4/2019 2:44:00 AM] 	at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:228)
[3/4/2019 2:44:00 AM] 	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)
[3/4/2019 2:44:00 AM] 	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
[3/4/2019 2:44:00 AM] 	at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
[3/4/2019 2:44:00 AM] 	at com.google.gson.Gson.fromJson(Gson.java:927)
[3/4/2019 2:44:00 AM] 	at com.google.gson.Gson.fromJson(Gson.java:892)
[3/4/2019 2:44:00 AM] 	at com.google.gson.Gson.fromJson(Gson.java:841)

EventData object needs to rehydrated from the input data:

    EventData data = new EventData(message);
    LinkedHashMap<String, Object> sysProps = new LinkedHashMap<>();
    sysProps.put("x-opt-offset", offset);
    sysProps.put("x-opt-sequence-number", sequenceNumber);
    addSystemProperties(data, sysProps);

pragnagopa avatar Mar 04 '19 16:03 pragnagopa