小编Ken*_*Ken的帖子

类不是抽象的,不实现抽象基类成员

我对这个与为从 Maven 包导入的抽象类提供实现相关的 Kotlin 错误感到困惑。

我有一个用 Kotlin 编写的 Maven 库,并公开了一个名为 APIGatewayRequestHandler 的抽象类。在导入库的应用程序中,我提供了抽象类的实现:

class GetWelcomeMessageHandler : APIGatewayRequestHandler<WelcomeMessage>()
    fun handleAPIGatewayRequest(input: com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent, context: com.amazonaws.services.lambda.runtime.Context?): WelcomeMessage {
        return WelcomeMessage()
    }
}
Run Code Online (Sandbox Code Playgroud)

从库中反编译的抽象类如下所示:

public abstract class APIGatewayRequestHandler<T> public constructor() : com.amazonaws.services.lambda.runtime.RequestHandler<com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent, T> {
    public abstract fun handleAPIGatewayRequest(input: com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent, context: com.amazonaws.services.lambda.runtime.Context?): T

    public open fun handleRequest(input: com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent?, context: com.amazonaws.services.lambda.runtime.Context?): T {
        /* compiled code */
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Class 'GetWelcomeMessageHandler' is not abstract and does not implement abstract base class member
public abstract fun handleAPIGatewayRequest(input: APIGatewayProxyRequestEvent, …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-interop

8
推荐指数
1
解决办法
1万
查看次数

XHR请求在Chrome中显示已取消状态(不是CORS)

我在Chrome中发出了一个XHR Post请求,它会立即返回一个错误类型的响应,没有详细信息.在Chrome中,响应状态显示为"已取消".但是,请求实际到达服务器并由服务器处理(使用断点进行验证).但是,在请求到达服务器之前,XHR错误响应和Chrome响应状态"已取消"发生.我正在测试使用本地网络服务器和应用服务器,其单一来源是"local.mydomain.com".所以没有跨领域的含义.什么可能导致这种行为?

javascript ajax google-chrome xmlhttprequest

7
推荐指数
0
解决办法
2144
查看次数

使用 @Async 和 TaskDecorator 记录 MDC

使用 Spring MVC,我有以下设置:

  1. 用于记录请求的 AbstractRequestLoggingFilter 派生过滤器。
  2. 一个 TaskDecorator,用于将 MDC 上下文映射从 Web 请求线程编组到 @Async 线程。

我正在尝试使用 MDC(或 ThreadLocal 对象)为处理请求所涉及的所有组件收集上下文信息。

我可以从@Async 线程正确检索 MDC 上下文信息。但是,如果@Async 线程要将上下文信息添加到 MDC,我现在如何将 MDC 上下文信息编组到处理响应的线程?

任务装饰器

public class MdcTaskDecorator implements TaskDecorator {
@Override
public Runnable decorate(Runnable runnable) {
    // Web thread context
    // Get the logging MDC context
    Map<String, String> contextMap = MDC.getCopyOfContextMap();

    return () -> {
        try {
            // @Async thread context
            // Restore the web thread MDC context
            if(contextMap != null) {
                MDC.setContextMap(contextMap);
            }
            else {
                MDC.clear(); …
Run Code Online (Sandbox Code Playgroud)

logging spring-mvc logback slf4j mdc

6
推荐指数
3
解决办法
7260
查看次数

@Autowired 成员未在用 Kotlin 编写的 Junit 5 测试中初始化

我无法在 JUnit 5 测试中初始化 @Autowired 成员。这是测试:

import org.amshove.kluent.`should be equal to`
import org.junit.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.context.annotation.Bean

@SpringBootTest
class SnackQueryResolverTest {
    @TestConfiguration
    class SnackQueryResolverTestConfig {
        @Bean
        fun snackQueryResolverFactory() = SnackQueryResolver()
    }

    @Autowired
    private lateinit var snackQueryResolver: SnackQueryResolver

    @Test
    fun `snacks`() {
        val snacks = snackQueryResolver.snacks()
        snacks.size `should be equal to` 5
    }
}

Run Code Online (Sandbox Code Playgroud)

运行测试时我收到错误:

kotlin.UninitializedPropertyAccessException: lateinit property snackQueryResolver has not been initialized
Run Code Online (Sandbox Code Playgroud)

如果我消除 @Autowired 并在构造期间实例化 bean,则测试运行良好:

@SpringBootTest
class SnackQueryResolverTest {
    private val snackQueryResolver: SnackQueryResolver = SnackQueryResolver() …
Run Code Online (Sandbox Code Playgroud)

autowired kotlin junit5

5
推荐指数
1
解决办法
3738
查看次数

DynamoDBMapper 加载无法实例化 Kotlin 数据类

在用 Kotlin 编写的 AWS Lambda(即不是 Android)中使用 DynamoDBMapper,我可以使用数据类保存记录。但是,当我尝试将记录加载到数据类时,我收到“DynamoDBMappingException:无法实例化类”异常。

@DynamoDBTable(tableName = "Test")
data class TestItem(
    @DynamoDBHashKey(attributeName="someKey")
    @DynamoDBAttribute(attributeName = "someKey")
    var someKey: String?,

    @DynamoDBAttribute(attributeName = "someValue")
    var someValue: String?
}

val ddbMapper = DynamoDBMapper(AmazonDynamoDBClientBuilder.defaultClient())
ddbMapper.load(TestItem::class.java, "xyz")
Run Code Online (Sandbox Code Playgroud)

导致以下异常:

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException:无法实例化类 com.intuit.connect_to_pro.lambda_common_core.aws_service.TestItem

根例外是:

java.lang.NoSuchMethodException: com.intuit.connect_to_pro.lambda_common_core.aws_service.TestItem.()

AWS 有一个 Android 示例,它使用 com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper 而不是 com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper。我尝试了Android版本,但结果是一样的。

https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html

任何帮助,将不胜感激。

kotlin amazon-dynamodb aws-lambda

4
推荐指数
1
解决办法
3413
查看次数

如何调试从 Flutter Platform Channel 调用的原生 Android

我似乎不知道如何对通过平台通道从 Flutter 应用程序调用的本机 Android 模块进行调试。我正在使用 Flutter 文档中的示例(https://flutter.dev/docs/development/platform-integration/platform-channels)。我尝试过以下方法:

  1. 在IntelliJ中打开Flutter项目
  2. 右键单击 android 文件夹并选择 Flutter | 在 Android Studio 中打开 Android 模块
  3. Android Studio 打开原生 Android 代码。
  4. 在Android代码中设置断点
  5. 单击 Android Studio 中的“调试”
  6. 模拟器显示“等待调试器应用程序正在等待调试器附加”,而在 Android Studio 中调试控制台显示“已连接到目标 VM,地址:'localhost:8601'”
  7. 从 IntelliJ 运行 Flutter 应用程序(我也尝试过从 IntelliJ 进行调试 - flutter 代码将在断点处停止)
  8. 原生 Android 代码的断点永远不会中断

我究竟做错了什么?

android flutter flutter-platform-channel

3
推荐指数
1
解决办法
3985
查看次数