Como posso especificar host e porta ao acessar um serviço web a partir do código JAX-WS-gerado?
-
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!
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.