ROME Feeds: coloque o proxy no cliente HTTP
Deixe o cliente HTTP cuidar do roteamento do proxy e do tratamento de status, e depois passe o stream e o tipo de conteúdo ao leitor XML do ROME.
O ROME analisa os bytes do feed; a rota do proxy e a conta devem pertencer ao cliente HTTP. Para um JDK HttpClient escolhido, um proxy fixo fica no seu builder:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example", 8080)))
.build();
Para um teste permitido de feed público sem autenticação de proxy, substitua o host e a porta de exemplo por um candidato da lista de proxies HTTP. Adicione a autenticação da implantação e os limites de requisições a esse cliente. Depois de obter uma resposta aceitável, entregue o stream ao ROME:
try (XmlReader reader = new XmlReader(body, contentType)) {
SyndFeed feed = new SyndFeedInput().build(reader);
}
Os imports modernos são com.rometools.rome.io.XmlReader e SyndFeedInput. Aqui body é o InputStream recebido e contentType é o HTTP Content-Type. O XmlReader considera o BOM, esses metadados e a declaração XML. Decodificar primeiro com um charset arbitrário pode descartar evidências úteis.
Inspecione o status HTTP antes de analisar. Caso contrário, uma página de login do proxy ou uma negação podem aparecer como erro XML. Libere também os corpos das respostas rejeitadas, para que um erro HTTP não deixe seu stream aberto.
Duas fontes de feed podem usar clientes configurados de forma diferente sem alterar as propriedades de proxy da JVM entre chamadas. Cada cliente HTTP possui sua rota, enquanto o ROME possui a etapa de análise.