Поле factory
в URLConnection
(суперкласс HttpURLConnection
) является статической переменной-членом доступа к пакету. Единственное место, где он изменяется с помощью API, - это метод setContentHandlerFactory()
, и, как вы заметили, вы можете вызывать его только один раз для любого URL-соединения (или подкласса) в приложении.
Я считаю, что есть способ обойти это, но вряд ли он идеален: вы можете сбросить и / или изменить значение поля factory
, используя отражение (при условии, что ваше приложение имеет соответствующие привилегии администратора безопасности, чтобы создать поле доступны ).
Вот фрагмент кода, который сделает это:
ContentHandlerFactory newFactory = ... // create factory instance
factoryField = URLConnection.class.getDeclaredField( "factory" );
factoryField.setAccessible( true );
factoryField.set( null, newFactory );
Проблема в том, что API не ожидает, что это когда-либо произойдет, поэтому могут возникнуть нежелательные побочные эффекты (так как это относится ко всем подклассам URL-соединения). По сути, вы будете делать это на свой страх и риск.