【问题标题】:how to unset ContentHandlerFactory in HTTPUrlConnection如何在 HTTPUrlConnection 中取消设置 ContentHandlerFactory
【发布时间】:2010-04-30 07:38:52
【问题描述】:

HTTPUrlConnection.setContentHandlerFactory()method 抛出异常,表示工厂已定义。我明白那个。是否可以取消设置工厂并更改内容处理程序工厂?

【问题讨论】:

    标签: java httpurlconnection


    【解决方案1】:

    URLConnectionHttpURLConnection 的超类)中的factory 字段是静态包访问成员变量。它通过 API 修改的唯一地方是 setContentHandlerFactory() 方法,正如您所指出的,您只能为应用程序中的任何 URL 连接(或子类)调用一次。

    我相信有一种解决方法,但这并不理想:您可以使用反射重置和/或更改 factory 字段的值(假设您的应用程序具有适当的安全管理器权限来创建 field accessible) .

    这是一个可以这样做的 sn-p:

    ContentHandlerFactory newFactory = ... // create factory instance
    factoryField = URLConnection.class.getDeclaredField( "factory" );
    factoryField.setAccessible( true );
    factoryField.set( null, newFactory );
    

    问题在于 API 不希望这会发生,因此可能会产生不希望的副作用(因为它适用于所有 URL 连接子类)。基本上,您将自行承担风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2012-05-18
      • 1970-01-01
      • 2010-12-29
      • 2016-01-02
      • 2017-04-02
      • 2011-08-29
      相关资源
      最近更新 更多