Reputation: 5563
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:
graalvmNative
Gradle task to allow a few classes to initialize at build time (to get the build passing): // 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')
proxy-config.json
and reflect-config.json
like so:[
{
"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