我想用javax.xml.transform.Transformer
转换XML文件,但我的网络访问权限通过代理。
我尝试在转换器中使用新的URIResolver
,但这不起作用。如何指示变压器使用代理?
答案 0 :(得分:3)
对于来自JDK的常规网络访问,一个选项是在启动时传递JDK args。
类似的东西:
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
但是,在需要解析XSD,DTD等的XML处理的特定示例中。在尝试使用资源的本地副本时,几乎总是更好,并指定javax.xml.stream.XMLResolver为你的解析器加载本地副本而不是远程。
答案 1 :(得分:1)
您需要在应用程序中设置代理。
首先,您需要创建一个扩展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);
第三,将端口,代理作为系统属性传递给您的应用程序。有了码头和maven,它看起来像:
mvn jetty:run -DproxySet=true -DproxyHost=proxy.company.com -DproxyPort=8080