akourt
akourt

Reputation: 5563

Azure Communication Email GraalVM compilation

I am toying around with Azure's Comunication Service, more specifically with an Email communication service. I have setup a small example and my goal is to integrate it into one of my services. Said service is meant to compile into Graal native for improved performance which the library in question is giving me a hard time. So far what I have done is the following:

    // To get the azure email sdk to compile to native
    buildArgs.add('--initialize-at-build-time=org.slf4j.helpers.Reporter')
    buildArgs.add('--initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter')
    buildArgs.add('--initialize-at-build-time=ch.qos.logback.core.util.StatusPrinter2')
[
  {
    "interfaces": [
      "com.azure.communication.email.implementation.EmailsImpl$EmailsService"
    ]
  }
]

[
  {
    "name": "com.azure.communication.email.implementation.models.ErrorResponseException",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.ErrorResponse",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.EmailMessage",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.EmailContent",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.EmailRecipients",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.EmailAttachment",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  },
  {
    "name": "com.azure.communication.email.implementation.models.EmailAddress",
    "allPublicMethods": true,
    "allDeclaredConstructors": true,
    "queryAllDeclaredConstructors": true,
    "queryAllPublicConstructors": true,
    "queryAllDeclaredMethods": true,
    "queryAllPublicMethods": true,
    "allDeclaredClasses": true,
    "allPublicClasses": true
  }
]

With all the above I am able to run the native executable. However when I attempt to send out an email I get the following exception:


com.azure.communication.email.implementation.models.ErrorResponseException: Status code 400, "{"error":{"code":"BadRequest","message":"Request body validation error. See property 'content'","target":null,"details":null,"innererror":null}}"
        at [email protected]/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[mailer-service:na]
        at [email protected]/java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[mailer-service:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:251) ~[na:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:98) ~[mailer-service:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.MethodHandleIntrinsicImpl.execute(MethodHandleIntrinsicImpl.java:179) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:186) ~[na:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:98) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:96) ~[na:na]
        at [email protected]/java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:959) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:936) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:105) ~[mailer-service:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.MethodHandleIntrinsicImpl.execute(MethodHandleIntrinsicImpl.java:179) ~[na:na]
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:186) ~[na:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:98) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:96) ~[na:na]
        at [email protected]/java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:959) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:936) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:105) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0) ~[mailer-service:na]
        at [email protected]/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder) ~[na:na]
        at [email protected]/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733) ~[mailer-service:na]
        at com.azure.core.implementation.MethodHandleReflectiveInvoker.invokeStatic(MethodHandleReflectiveInvoker.java:26) ~[na:na]
        at com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache.invoke(ResponseExceptionConstructorCache.java:53) ~[na:na]
        at com.azure.core.implementation.http.rest.RestProxyBase.instantiateUnexpectedException(RestProxyBase.java:407) ~[mailer-service:1.50.0]
        at com.azure.core.implementation.http.rest.AsyncRestProxy.lambda$ensureExpectedStatus$1(AsyncRestProxy.java:135) ~[na:na]
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[na:na]
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) ~[na:na]
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2367) ~[mailer-service:3.6.9]
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2241) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) ~[na:na]
        at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) ~[na:na]
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[mailer-service:3.6.9]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) ~[na:na]
        at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) ~[na:na]
        at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) ~[na:na]
        at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:137) ~[na:na]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[na:na]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158) ~[mailer-service:3.6.9]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:245) ~[mailer-service:3.6.9]
        at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:305) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[na:na]
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[na:na]
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:158) ~[mailer-service:3.6.9]
        at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2864) ~[mailer-service:3.6.9]
        at reactor.core.publisher.MonoSingle$SingleSubscriber.onComplete(MonoSingle.java:180) ~[na:na]
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onComplete(MonoFlatMapMany.java:261) ~[na:na]
        at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126) ~[na:na]
        at reactor.core.publisher.MonoUsing$MonoUsingSubscriber.onNext(MonoUsing.java:232) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[na:na]
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[na:na]
        at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:129) ~[na:na]
        at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224) ~[na:na]
        at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:113) ~[mailer-service:3.6.9]
        at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:194) ~[na:na]
        at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[na:na]
        at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2097) ~[mailer-service:3.6.9]
        at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118) ~[na:na]
        at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[na:na]
        at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[na:na]

Honestly I am a bit puzzled as to how to proceede with this. Has anyone any idea as to how this can be mitigated? If not, then does anyone have an example sending out emails directly through the REST API?

Upvotes: 0

Views: 76

Answers (0)

Related Questions