Como faço para configurar o Glassfish para ir através de um servidor proxy?

Eu tenho tido problemas com a execução de uma instância do Glassfish v2.1.1 na minha máquina local de dentro do escritório, onde temos um servidor proxy para conexões de saída. Minha solução inicial foi trabalhar em casa.

Estou chamando um serviço SOAP em um servidor HTTPS fora da empresa. Como o Glassfish não está passando pelo servidor proxy da empresa, recebo o seguinte erro ao tentar inicializar meus clientes SOAP:

javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://www.hostname.com... 

e

 Caused by: java.net.UnknownHostException: www.hostname.com 

Eu tenho variables ​​de ambiente de proxy definidas na minha linha de comando, bem como todas as minhas configurações de proxy do sistema funcionando corretamente para que eu possa obter o WSDL com o navegador. Como devo configurar o Glassfish?

Eu tive muita dificuldade em encontrar uma resposta para isso, já que o tópico não é abordado em muitos detalhes na web. Um link me disse como configurar o proxy HTTP, mas não mencionou nada sobre HTTPS, então demorei um pouco para descobrir.

Abra o console de administração em seu servidor Glassfish e vá para: Application Server -> Configurações da JVM -> Opções da JVM. Clique em “Add JVM Option” 4 vezes e insira as 4 opções a seguir

 -Dhttp.proxyHost=proxyhostname -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxyhostname -Dhttps.proxyPort=8080 

Onde proxyhostname e o número da porta estão corretos para sua configuração. Então você precisa reiniciar o servidor.

Note que não encontrei nenhuma opção para configurar o proxy a partir de um arquivo PAC, nem para proxies que requerem autenticação. Nesse caso, talvez seja necessário instalar um manipulador de proxy de autenticação local como Authoxy para Mac OS X, que transforma seu host local em um proxy não de autenticação e mascara a solicitação de autenticação do proxy de autenticação central.

Além disso, esse link era bom para várias opções de proxy para a JVM: http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

Você precisa definir explicitamente o servidor proxy. Várias opções estão disponíveis dependendo da versão do Glassfish. Em geral, você pode definir o proxy usando argumentos da JVM ou o console do Glassfish Admin. Uma introdução para GF3 está disponível aqui (desculpe por apenas fornecer um link, mas eu não quero repetir todos os detalhes aqui).

Apenas para completar a resposta, se o proxy exigir nome de usuário e senha, defina o seguinte em Glassfish:

 -Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword 

O host não pode ser resolvido, você tem certeza de usar um nome de host resolvível por um servidor DNS da Internet ou está usando algo que só pode ser resolvido de dentro da sua rede ou, pior ainda, um local de input de hosts em sua máquina?
Afora isso, o servidor proxy pode estar negando o access a algumas portas, mas isso provavelmente não é problema seu agora. Se o proxy permitir access à porta 80, tente executar o Glassfish na porta 80 também se ocorrer algum erro de tempo limite de conexão.