URL.setURLStreamHandlerFactory

2024-05-18

我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序。
我的jar包含一个依赖jar。(jar in jar)
我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Eclipse 开发的。
JarRsrcLoader正在使用URL#setURLStreamHandlerFactory(RsrcURLStreamHandlerFactory)解决rsrc协议。
从而可以解析jar的类路径。
但通常的协议无法解决其副作用。
例如file:xxxx or jar:xxxx.
RsrcURLStreamHandlerFactory has setURLStreamHandlerFactory method.
也许我认为我应该为此方法设置默认实现。
我不知道这个方法是什么设置的。


只有一个实例URLStreamHandlerFactory实现已注册到 Java 运行时,因此该实现必须了解所有支持的协议。

默认的 Oracle/Sun 行为不是以这种方式实现的,而是直接在java.net.URL班级。因此,您不能简单地将默认实现作为链式工厂注入RsrcURLStreamHandlerFactory。答案的第一部分。

The java.net.URL getURLStreamHandler方法加载协议的实现X根据其类名的命名策略,默认为sun.net.www.protocol.X.Handler

如果你看jre/lib/rt.jar, 你会找到:

sun/net/www/protocol/ftp/Handler.class
sun/net/www/protocol/gopher/Handler.class
sun/net/www/protocol/mailto/Handler.class
sun/net/www/protocol/netdoc/Handler.class
sun/net/www/protocol/http/Handler.class
sun/net/www/protocol/jar/Handler.class
sun/net/www/protocol/file/Handler.class

用于协议的基础包列表URLStreamHandler选择来自于java.protocol.handler.pkgsJava 系统属性。我邀请您阅读完整的源代码java/net/URL.java从JDKsrc.zip了解细节。

  • 因此,正确的方法(无论 IBM/Eclipse 做了什么)是保留默认机制并设置实例-Djava.protocol.handler.pkgs="com.company.product.protocol"在命令行上(如果您有权限/认证)。与一个URLStreamHandler实施命名为com.company.product.protocol.rsrc.Handler使用JarRsrcLoader,你就完成了工作。

  • 另一种选择是写一个URLStreamHandlerFactory作为链式工厂实施RsrcURLStreamHandlerFactory灵感来自URL.getURLStreamHandler源代码。作为示例,您可以阅读这个旧的 JBoss 代码 http://docs.jboss.org/jbossas/javadoc/4.0.2/org/jboss/net/protocol/URLStreamHandlerFactory.java.html。它依赖于URL内部处理程序通过预加载其他处理程序进行缓存known (or used)注册工厂之前的协议。在我看来,只是丑而已。

Warning: RsrcURLStreamHandler替换了原来的180行代码URLStreamHandler.parseURL通过它自己的 10 行“版本”,无需调用super.parseURL。当然它不遵守 URL 连接规范!请注意,根据此类 URL 的使用方式,您可能会遇到错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URL.setURLStreamHandlerFactory 的相关文章

  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 如何将 Eclipse Classic 升级到 Java EE?

    我想开发 HTML5 网站 我已经安装了用于Android开发的Java 我的机器上安装了 Eclipse Classic 3 6 现在我希望在同一台机器上安装 Java EE 是否可以 如果是这样 请告诉我如何将 Eclipse Clas
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐