Используйте Java XML Transformer с сетевым прокси - PullRequest
2 голосов
/ 23 февраля 2012

Я хочу преобразовать файл XML с помощью javax.xml.transform.Transformer, но мой веб-доступ проходит через прокси.

Я пытался использовать новый URIResolver с преобразователем, но это не сработало,Как я могу дать указание преобразователю использовать прокси?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Для общего доступа к сети из JDK, один вариант - передать аргументы JDK при запуске.

Что-то вроде:

java -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=8080 ... MyTransformerClass

Часто лучшим решением является программная установка параметра в вашем приложении, используя значения, которые вы прочитали из вашего файла конфигурации.

Что-то вроде:

System.setProperty("http.proxyHost", myConfig.getProxyHost());
System.setProperty("http.proxyPort", myConfig.getProxyPort());

См. http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html для всех опций

Однако в конкретном примере обработки XML, где вам необходимо разрешить XSD, DTD и т. Д. Это почти всегда лучшеиметь локальную копию ресурса, как вы пытались, и указать javax.xml.stream.XMLResolver в свой анализатор для загрузки локальной копии, а не удаленной.

1 голос
/ 23 февраля 2012

Вам необходимо настроить прокси в вашем приложении.

Во-первых, вам нужно создать класс, который расширяет java.net.Authenticator, как этот:

import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class SimpleAuthenticator extends Authenticator {

    private String username, password;

    public SimpleAuthenticator(String username, String password) {

        this.username = username;
        this.password = password;
    }

    protected PasswordAuthentication getPasswordAuthentication() {

        return new PasswordAuthentication(username, password.toCharArray());
    }
}

Во-вторых, инициализируйте Authenticatorв вашем коде:

SimpleAuthenticator sm = new simpleAuthenticator("user", "pass")
Authenticator.setDefault(sm);

В-третьих, передайте порт, прокси-сервер в качестве системных свойств вашего приложения.С пристанью и мавеном это будет выглядеть так:

mvn jetty:run -DproxySet=true -DproxyHost=proxy.company.com -DproxyPort=8080
...