Este exemplo é uma forma incomum de consumir um Web Service é enviar de sua aplicação uma mensagem no formato SOAP para um ou mais métodos daquele serviço, a pouco tempo tive de tratar um caso assim, e por isso montei esse exemplo referente a esta forma de tratar uma requisição. Para simplificar a implementação monto um exemplo baseado no tópico : Gerando WebServices com JAX-WS.
Para realizar a requisição a um método do Web Service utilizo a Classe UrlConnection para fazer a conexão, chamar o método e setar as propriedades de requisição.
O método a ser testado é o retornarString para isso enviaremos a seguinte mensagem SOAP.
Não indico consumir um serviço desta forma, a melhor forma sempre será gerar os stubs do lado cliente, porém podemos também consumir um serviço desta maneira, realizo a implementação de forma simples passando a requisição dentro de uma String mas também podemos montar essa entrada dentro do próprio código com XStream nada nos impede de criar e implementar códigos de modo genérico para que atendam nossas necessidades.
packagebr.com.service.soap.request;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.URL;importjava.net.URLConnection;publicclassRequisicaoSoap {publicstaticvoidmain(String[] args) {try{String msgRetorno ="";// Definir a URL Do Serviço sem a ?WSDL no fimURL url =newURL("http://localhost:8080/WsServidor");URLConnection conn =url.openConnection();// Define que a Conexão terá uma saída/retorno conn.setDoOutput(true);// Método a ser Consumido pela requisiçãoconn.setRequestProperty("SOAPAction","http://localhost:8080/WsServidor/retornarString");// Propriedades da Mensagem SOAPconn.setRequestProperty("Type","Request-Response");conn.setRequestProperty("Content-Type","text/xml;charset=UTF-8");conn.setRequestProperty("Accept-Encoding","gzip,deflate"); conn.setRequestProperty("User-Agent","Jakarta Commons-HttpClient/3.1");// Canal de Saída da RequisiçãoOutputStreamWriter wr =newOutputStreamWriter(conn.getOutputStream()); // Mensagem no Formato SOAPString xml =" <soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ser='http://service/'>"+" <soapenv:Header/>"+" <soapenv:Body>"+" <ser:retornarString>"+" <msg>Testando Requisicao SOAP</msg>"+" </ser:retornarString>"+" </soapenv:Body>"+" </soapenv:Envelope>";wr.write(xml); wr.flush(); System.out.println("Requisição >> "+conn.getOutputStream());// Leitura da Resposta do ServiçoBufferedReader rd =newBufferedReader(new InputStreamReader(conn.getInputStream()));// Leituras das Linhas da Respostawhile (rd.ready()){ msgRetorno +=rd.readLine(); }wr.close(); rd.close(); conn.getInputStream().close();System.out.println("Resposta >> "+ msgRetorno); } catch (IOException e) { e.printStackTrace(); } finally {System.out.println("Fim"); } }}