0

当尝试将Quarkus Qute 类型安全模板与 Kotlin 一起使用时(根据下面的代码将静态类转换为对象),我在运行时遇到了 UnsatisfiedLinkError。

有问题的代码:

@Path("/subscriber")
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.TEXT_HTML)
class SubscriberResource {

    @CheckedTemplate
    object Templates {
        external fun new(): TemplateInstance
    }

    @GET
    fun get(): TemplateInstance {
        return Templates.new()
    }
}

模板在resources/templates/SubscriberResource/new.html.

该项目构建良好,但是当我尝试打开视图时,出现下面给出的异常。

我也尝试过使对象成为companion对象,但没有帮助。

知道缺少什么吗?

java.lang.UnsatisfiedLinkError: 'io.quarkus.qute.TemplateInstance com.app.subscriber.SubscriberResource$Templates.new()' at com.app.subscriber.SubscriberResource$Templates.new(Native Method) at com.app.subscriber .SubscriberResource.get(SubscriberResource.kt:23) at com.app.subscriber.SubscriberResource_Subclass.get$$superaccessor1(SubscriberResource_Subclass.zig:189) at com.app.subscriber.SubscriberResource_Subclass$$function$$6.apply(SubscriberResource_Subclass$$ function$$6.zig:29) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54) at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.proceed(InvocationInterceptor.java:63) at io .quarkus.arc.runtime.devconsole.InvocationInterceptor.monitor(InvocationInterceptor.java:49) 在 io.quarkus.arc.runtime.devconsole.InvocationInterceptor_Bean。在 io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41) 在 io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41) 在 io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:41) 拦截(InvocationInterceptor_Bean.zig:521) .arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:32) at com.app.subscriber.SubscriberResource_Subclass.get(SubscriberResource_Subclass.zig:147) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang .reflect.Method.invoke(Method.java:566) 在 org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170) 在 org.jboss。resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130) at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:643) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java: 507) 在 org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364) 在 org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:457) 在 org. jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:459) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:419) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker. java:393) 在 org.jboss.resteasy.core.ResourceMethodInvoker。调用(ResourceMethodInvoker.java:68) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161) at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364) at org.jboss.resteasy .core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247) at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java :73) 在 io.quarkus.resteasy.runtime 的 io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:138)。在 io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:93) 在 io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor. java:231) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org .jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java :29) org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at java.base/java.lang.Thread.run(Thread.java:834) at org.jboss.threads.JBossThread.run( JBossThread.java:501) 导致:org.jboss.resteasy.spi.UnhandledException: java.lang.UnsatisfiedLinkError: 'io.quarkus.qute.TemplateInstance com.app.subscriber.SubscriberResource$Templates.new()' at org.jboss.resteasy。 core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:106) at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372) at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218)在 org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:519) ... 还有 18 个106) 在 org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218) 在 org.jboss.resteasy.core.SynchronousDispatcher 的 org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372) .invoke(SynchronousDispatcher.java:519) ... 还有 18 个106) 在 org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218) 在 org.jboss.resteasy.core.SynchronousDispatcher 的 org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372) .invoke(SynchronousDispatcher.java:519) ... 还有 18 个

4

1 回答 1

1

终于想出了一个解决办法,添加@JvmStatic到外部对象函数就解决了:

    @CheckedTemplate
    object Templates {
        @JvmStatic
        external fun new(): TemplateInstance
    }
于 2021-05-04T10:50:01.420 回答