加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – URL.setURLStreamHandlerFactory

发布时间:2020-12-15 00:45:57 所属栏目:Java 来源:网络整理
导读:我正在使用带有嵌入式Jetty的可执行jar开发Web应用程序. 我的jar包含一个依赖的jar.(罐子里的jar) 我引用了由 Eclipse开发的JarRsrcLoader和RsrcURLStreamHandlerFactory. JarRsrcLoader使用URL #setURLStreamHandlerFactory(RsrcURLStreamHandlerFactory)来
我正在使用带有嵌入式Jetty的可执行jar开发Web应用程序.
我的jar包含一个依赖的jar.(罐子里的jar)
我引用了由 Eclipse开发的JarRsrcLoader和RsrcURLStreamHandlerFactory.
JarRsrcLoader使用URL #setURLStreamHandlerFactory(RsrcURLStreamHandlerFactory)来解析rsrc协议.
从而它可以解析jar的类路径.
但是,作为副作用解决通常的协议变得不可能.
例如file:xxxx或jar:xxxx.
RsrcURLStreamHandlerFactory具有setURLStreamHandlerFactory方法.
也许我认为我应该为这个方法设置默认工具.
我不知道这个方法是什么设置的.

解决方法

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

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

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.pkgs Java系统属性.我邀请您从JDK src.zip中读取java / net / URL.java的完整源代码以了解详细信息.

>所以正确的方法(无论IBM / Eclipse做了什么)是保留默认机制并在命令行上设置例如-Djava.protocol.handler.pkgs =“com.company.product.protocol” (如果您有权限/认可这样做).使用名为com.company.product.protocol.rsrc.Handler且使用JarRsrcLoader的URLStreamHandler实现,您可以完成工作.
>备用选项是将URLStreamHandlerFactory实现编写为RsrcURLStreamHandlerFactory中的链式工厂,其灵感来自URL.getURLStreamHandler源代码.例如,您可以阅读this old JBoss code.它在注册工厂之前通过预加载其他已知(或使用过的)协议来依赖URL内部处理程序缓存.在我看来,只是丑陋.

警告:RsrcURLStreamHandler已经用自己的10行“版本”替换了URLStreamHandler.parseURL的原始180行代码,而没有调用super.parseURL.当然,它不尊重URL连接规范!请注意,根据URL的使用方式,您可能会遇到错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读