jsoup 1.21.2 现已发布,新增了对 HTTP/2 连接中自定义SSLContext
的支持,并提升了属性中用户数据处理方式的一致性。此外,它还提升了 DOM 操作和片段解析的性能,并修复了流解析、遍历、克隆和并发读取中的一些边缘情况。
变化
- 已弃用的内部(但可见)方法
Normalizer#normalize(String, bool)
和Attribute#shouldCollapseAttribute(Document.OutputSettings)
。这些将在未来的版本中删除。 - 已弃用
Connection#sslSocketFactory(SSLSocketFactory)
,建议使用新的Connection#sslContext(SSLContext)
。使用sslSocketFactory
将强制使用旧HttpUrlConnection
实现,该实现不支持 HTTP/2。#2370
改进
- 当进行 pretty-printing 时,如果有连续的文本节点(通过 DOM 操作),则它们之间的非重要空白将被折叠。#2349。
- 更新
Connection.Response#statusMessage()
为在使用HttpClient
实现时返回一个简单的可记录字符串消息(例如“OK”),否则不会返回任何服务器设置的状态消息。#2356 Attributes#size()
和Attributes#isEmpty()
现在将所有内部属性(例如用户数据)排除在其计数之外。这与属性的序列化输出和迭代器保持一致。#2369- 添加
Connection#sslContext(SSLContext)
以向请求提供自定义 SSL (TLS) 上下文,同时支持HttpClient
和旧版HttUrlConnection
实现。#2370 - 针对 DOM 操作方法的性能优化,包括在多次移除元素的第一个子元素(
element.child(0).remove()
),以及使用Parser#parseBodyFragement()
解析大量直接子元素时的情景。#2373。
错误修复
- 当从 InputStream 进行解析并且多字节字符恰好跨越缓冲区边界时,流将无法完全读取。#2353。
- 在
NodeTraversor
中,如果在head()
调用期间删除了最后一个子元素,则父元素会被访问两次。#2355。 - 克隆具有 Attributes 对象的 Element 会向该克隆添加一个空的内部用户数据属性,这会导致
Attributes#size()
和Attributes#isEmpty()
出现意外结果。#2356 - 在多线程应用程序中,多个线程同时调用同一元素
Element#children()
时,该方法生成内部子元素缓存(其子节点的筛选视图)时可能会发生竞争条件。由于 DOM 对象的并发读取应该是线程安全的,无需外部同步,因此该方法已更新为原子执行。#2366 - 格式错误的 HTML 可能会在 adoption agency 期间抛出 IndexOutOfBoundsException。#2377。
详情可查看:https://jsoup.org/news/release-1.21.2