Pergunta

Eu tenho um serviço da web gerado pelo wsgen através do maven.Quando eu implantar o serviço Glassfish, coloca o URL do servidor para o WSDL.Nossa Glassfish server é liderada por um Apache servidor proxy.

O que isso tudo significa é que quando alguém acessa o nosso WSDL e olha para o ponto de extremidade de serviço e o sabão de localização de endereço que vejo é

http://app server url/service...

em vez de

http://proxy server url/service...

Eu acho que eu preciso de alguns esclarecimentos sobre alguns itens...

  1. É este endereço de ponto de extremidade importante?Vai clientes ainda poderão funcionar se o endereço de ponto de extremidade não corresponde ao URL do servidor proxy que irá ser chamada para invocar o serviço.Basicamente, isso faz as perguntas "é o WSDL para o serviço web como interface para o objeto".

    ATUALIZAÇÃO: Em resposta a esta primeira pergunta, parece que a "O WSDL para o serviço web como interface para o objeto".O endereço de ponto de extremidade especificado no WSDL não é importante.Na verdade, é relativamente trivial para invocar uma operação de serviço da web em um ponto de extremidade diferente do que o especificado no WSDL como descrito aqui.

    // Create service and proxy from the generated Service class.
    HelloService service = new HelloService();
    HelloPort proxy = service.getHelloPort();
    
    // Override the endpoint address
    ((BindingProvider)proxy).getRequestContext().put(
            BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
            "http://new/endpointaddress");
    proxy.sayHello("Hello World!");
    

  2. O WSDL é gerado automaticamente quando o utilizamos para o Glassfish.Existe uma maneira fácil para substituir isto gerou um endereço de ponto de extremidade no Glassfish através de um aplicativo de servidor de configuração.Se assim for, eu posso criar um cenário para colocar automaticamente o URL do servidor proxy para o WSDL gerado.

Se 1 é de fato importante e não podemos substituí-la de forma alguma, com 2, então isso significa, basicamente, o que temos de fazer estátuas para o desenvolvimento e a produção.Isso não "sentir" como parece, para mim, a única coisa que precisamos fazer para implantar para outro server é uma gota existente (e testado) guerra de um ambiente para o novo servidor.

Foi útil?

Solução

Acontece que há um Server Name parâmetro na HTTP Listener onde o serviço é implantado.Você pode especificar esse valor do Glassfish console de administração e Glassfish vai usar este nome ao invés do nome de host na URL do pedido.

Infelizmente, este parâmetro não permitirá que você para substituir a porta ou protocolo (http, https) se o seu servidor de aplicativos e servidor proxy não usar os mesmos (o nosso, não).

O que eu fiz, em vez disso foi escrever um simples filtro servlet para o meu serviço para lidar com isso para mim.

Outras dicas

Descobri o que considero uma maneira muito simples de lidar com o problema: use mod_substitute no Apache. Como aqueles de nós com esse problema já estão usando o Apache, e ele é construído e simples, gostei mais dessa abordagem.

Coloquei um bloco semelhante ao abaixo em um dos meus arquivos Apache Conf e encontrei alegria:

<Location />
   AddOutputFilterByType SUBSTITUTE text/xml
   Substitute "s|http://internal:8080/xxx|https://external/xxx|ni"
</Location>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top