如何在HTTPUrlConnection中取消设置ContentHandlerFactory

时间:2010-04-30 07:38:52

标签: java httpurlconnection

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

1 个答案:

答案 0 :(得分:1)

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

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

以下是一个代码片段:

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

这个问题是API不会发生这种情况,因此可能会产生不必要的副作用(因为它适用于所有URL连接子类)。基本上你会自己承担风险。