Como posso especificar host e porta ao acessar um serviço web a partir do código JAX-WS-gerado?

StackOverflow https://stackoverflow.com/questions/649019

  •  19-08-2019
  •  | 
  •  

Pergunta

Eu tenho um arquivo WSDL para um serviço web. Estou usando JAX-WS / wsimport para gerar uma interface do cliente para o serviço Web. Eu não sei de antemão o host que o serviço web será executado, e eu quase posso garantir que não será http : // localhost: 8080 . Como especifico o URL de host em tempo de execução, por exemplo, a partir de um argumento de linha de comando?

O MyService(URL wsdlLocation, QName serviceName) construtor gerado não parece ser o que eu quero, mas talvez seja? Talvez uma das variantes de Service.getPort(...)?

Obrigado!

Foi útil?

Solução

O construtor deve funcionar bem para as suas necessidades, quando você cria MyService, passá-lo a url do WSDL que você deseja ou seja, http: // someurl:?. someport / serviço WSDL

Outras dicas

Se você tem um olhar na fonte próxima gerado para o construtor gerado, você deve ser capaz de descobrir o que colocar nele a partir do construtor padrão, deve ser algo como:

public OrdersService() {
    super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}

Você deve ser capaz de encontrar o def de WSDL_LOCATION no campo estático mais acima na classe.

Em seu código gerado (por exemplo: digamos "HelloWorldWebServiceImplService"). Olhar para o bloco estático no topo que terá de referência para a url WSDL ou arquivo WSDL que está sob META-INF

 /*
static {
    URL url = null;
    try {
        url = new URL("http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(HelloWorldWebServiceImplService.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    }
    WSDL_LOCATION = url;
}
*/

Uma vez que você comentar esta também é preciso comentar o construtor padrão e escusado será dizer intialize o WSDL_LOCATION estática = null; (A nula) Então você não terá dois construtores como mostrado abaixo.

public final static URL WSDL_LOCATION = null;
public HelloWorldWebServiceImplService(URL wsdlLocation) {
    super(wsdlLocation, SERVICE);
}

public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
}

Chamando Webservice: Agora na chamada cliente onde você instancia esse objeto Passe a URL webservice como um argumento como mostrado

   //You can read mywebserviceURL from property file as String.
    String mywebserviceURL = "http://myqamachine.com/HelloWorld/HelloWorldWebServiceImpl?wsdl"
    URL WsURL = new URL(mywebserviceURL);
    HelloWorldWebServiceImplService webService = new HelloWorldWebServiceImplService(WsURL);

Então aqui você pode apontar dinamicamente a url webservice.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top