- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从 AWS 实现 DynamoDBMapper,但当我尝试连接到 AWS 服务器时应用程序崩溃了。
首先,我在 Android Studio 模拟器上运行 Android 4.4.2,一切似乎都运行良好。那里没有问题。尽管如此,当我尝试在实际设备上运行时(在平板电脑上运行 4.4.2...不知道制造商),我收到以下错误:
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6bffcdf0:
Failure in SSL library, usually a protocol error error:140740B5:SSL
routines:SSL23_CLIENT_HELLO:no ciphers available (external/openssl/ssl/s23_clnt.c:486 0x68474ce0:0x00000000)
这是完整的堆栈跟踪:
Caused by: com.amazonaws.AmazonClientException: Unable to execute HTTP request: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6bffcdf0: Failure in SSL library, usually a protocol error error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available (external/openssl/ssl/s23_clnt.c:486 0x68474ce0:0x00000000)
com.amazonaws.http.AmazonHttpClient.executeHelper AmazonHttpClient.java:421
com.amazonaws.http.AmazonHttpClient.execute AmazonHttpClient.java:196
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke AmazonDynamoDBClient.java:3257
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.getItem AmazonDynamoDBClient.java:904
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load DynamoDBMapper.java:393
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load DynamoDBMapper.java:466
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.load DynamoDBMapper.java:340
@@@@.@@@@@.@@@@$@@@@.doInBackground MainActivity.java:1259
@@@@.@@@@@.@@@@$@@@@.doInBackground MainActivity.java:1237
android.os.AsyncTask$2.call AsyncTask.java:288
java.util.concurrent.FutureTask.run FutureTask.java:237
... 4 more
其次是:
Caused by: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6bffcdf0: Failure in SSL library, usually a protocol error error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available (external/openssl/ssl/s23_clnt.c:486 0x68474ce0:0x00000000)
com.android.org.conscrypt.NativeCrypto.SSL_do_handshake Native Method
com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake OpenSSLSocketImpl.java:406
com.android.okhttp.Connection.upgradeToTls Connection.java:146
com.android.okhttp.Connection.connect Connection.java:107
com.android.okhttp.internal.http.HttpEngine.connect HttpEngine.java:294
com.android.okhttp.internal.http.HttpEngine.sendSocketRequest HttpEngine.java:255
com.android.okhttp.internal.http.HttpEngine.sendRequest HttpEngine.java:206
com.android.okhttp.internal.http.HttpURLConnectionImpl.execute HttpURLConnectionImpl.java:345
com.android.okhttp.internal.http.HttpURLConnectionImpl.connect HttpURLConnectionImpl.java:89
com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream HttpURLConnectionImpl.java:197
com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream HttpsURLConnectionImpl.java:254
com.amazonaws.http.UrlHttpClient.writeContentToConnection UrlHttpClient.java:128
com.amazonaws.http.UrlHttpClient.execute UrlHttpClient.java:65
com.amazonaws.http.AmazonHttpClient.executeHelper AmazonHttpClient.java:353
... 14 more
这是我的源代码:
BasicAWSCredentials awsCredentials = new BasicAWSCredentials("abcdef12345","blahblahblah");
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(awsCredentials);
DynamoDbMapper dbMapper = new DynamoDBMapper(dynamoDBClient);
//.... then eventually .....
AWSDriverNameTable awsDriverNameTable = dbMapper.load(AWSDriverNameTable.class, merchantID);
这是错误开始的最后一行代码。
现在,我查看了 SO 和一些搜索引擎,了解到一些 Android 设备回退到 SSL v3,而我尝试连接的服务器使用 TLS v1.0(访问 www.ssllabs。 com 并发现它确实使用了 TLS 1.0)。这是另一个 SO 问题,有人似乎已经解决了与此非常相似的问题:
How to disable SSLv3 in android for HttpsUrlConnection?
因此,如果这是导致问题的原因(需要删除 SSLv3),我该如何着手将 AmazonDynamoDbClient 配置为仅使用 TLS 1.0?我注意到您可以创建一个 ClientConfiguration 并使用:
clientConfiguration.getApacheHttpClientConfig().setSslSocketFactory(NoSSLv3SocketFactory);
并在 AmazonDynamoDbClient 构造函数中为其提供 awsCredentials。但是,它接受:
org.apache.http.conn.ssl.SSLSocketFactory
不是
javax.net.ssl.SSLSocketFactory
这是我提供的链接的答案中使用的内容(更不用说 Android Studio 通知我 org.apache.http.conn.ssl.SSLSocketFactory 已弃用)。
无论如何,我们将不胜感激。谢谢!
最佳答案
您可以使用 org.apache.http.conn.ssl.SSLConnectionSocketFactory
而不是 org.apache.http.conn.ssl.SSLSocketFactory
。
来自 SSLSocketFactory 的 JavaDoc (https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/SSLSocketFactory.html) -
Deprecated. (4.3) use SSLConnectionSocketFactory
关于java - AWS DynamoDbMapper 错误...由 : javax.net.ssl.SSLProtocolException 引起:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736988/
我的数据库表由多行组成,其 id 是唯一的。 API(Endpoint) -> 获取 id 的行我正在传递输入数组 (id1,id2,id3,id4) Question : In DynamoDBMa
我正在尝试使用 Java API 在 DynamoDB 中创建表。 问题:它只在表中创建哈希键索引,没有其他属性。 private void createTable(DynamoDBMapper ma
在低级 API 上使用 DynamoDBMapper 是否会影响性能?我想性能开销会很小甚至微不足道,但我无法在网上找到任何这样的引用资料。 在线示例还显示了在 POJO 本身上使用的映射器注释。这是
我正在尝试将我的 Android 应用程序连接到 AWS DynamoDB,但我无法创建 DynamoDBMapper 对象并导入该库: import com.amazonaws.mobileconn
我试图根据两个不同列的组合使表中的项目保持唯一。 我有一个 instanceId 和 imageId 列(以及其他列),并且基于 Stackoverflow 上的几篇文章和 AWS Forums以下应
使用 Java DynamoDBMapper,我如何才能仅在对象不存在时保存它(基于主键)。如果确实存在,我希望抛出异常或失败,而不是更新现有条目。 最佳答案 我相信你应该能够用 DynamoDbSa
我在 Amazon 的 AWS 工具包中遇到基于 Java 的 DynamoDBMapper 问题,抛出“无法实例化类”异常错误。这是我第一次尝试使用 DBMapper,所以我不确定我是否已正确设置所
我正在使用 DynamoDBMapper,当且仅当散列键和范围键组合不存在时,我想有条件地保存。我知道有一些方法可以使用 UUID 来减少碰撞的可能性,但我想通过使用条件保存来保护自己。 我遇到了 t
我正在使用散列键查询 DynamoDB 表。表中的每条记录由哈希键和范围键唯一标识 DynamoDBMapper mapper; .... MyClass myClass = new MyClass(
我正在研究一种保存到 DynamoDB 的方法。如果表中不存在该值,我希望该方法能够保存。如果确实存在,我想应用条件更新。我正在使用 DynamoDBMapper 的保存方法。 我目前的代码成功地进行
这是我想测试的一段代码 ... DynamoDBQueryExpression queryExpression = createQueryForLatestOrders(orderId, storeI
当我尝试从 DynamoDB 表获取一组分页数据时,它可以正常工作,但前提是它要查找的数据位于表的顶部。如果它更深入(我按 user_alias 排序数据,每个别名有 100 个元素),它不会返回任何
我在 Amazon DynamoDB 中有一个员工表(即项目)。该表的属性是 {employee_id, name, manager_id} 该类在 Java 中使用以下方式表示: @DynamoDB
我刚刚开始我的第一个 DynamoDB 项目,我一直在尝试尽可能多地阅读文档。我认为我的项目的最佳可能性是在 SDK 中使用高级 DynamoDbMapper 以允许 CRUD 操作。 在 Dynam
当您想要以下条件时,是否可以使用 DynamoDB 映射器进行有条件的写入/更新:如果属性不等于 X 则写入?我想做一个有条件的写,做这样的事情: DynamoRecord record = mapp
我已经开始使用 DynamoDB 并在 DynamoDBMapper 上看到了这条指令 http://aws.amazon.com/articles/0802321832592496 假设我有一个用户
我在 Scala 中有以下 DynamoDB 项目 @DynamoDBTable(tableName = Table) class DynamoItem { private var indexId
我想从 Dynamo DB 表中获取所有记录,并将它们映射到一个 POJO 数组中; POJO 很简单并且已经注释了。 DynamoDBMapper 似乎是将执行提取以获取记录并将它们反序列化到我的
DynamoDBMapper 提供了从 Map 构建对象的方法 JavaDoc : public T marshallIntoObject(类 clazz, map 项属性, DynamoDBMapp
在用 Kotlin 编写的 AWS Lambda(即不是 Android)中使用 DynamoDBMapper,我可以使用数据类保存记录。但是,当我尝试将记录加载到数据类时,我收到“DynamoDBM
我是一名优秀的程序员,十分优秀!