Como enviar dados de um cliente java desktop para um servidor via web services?

3 respostas
gtludwig

Amigos,

Estou batendo cabeça com um problema que aparenta ser trivial, mas não estou evoluindo. Tenho uma aplicação cliente-servidor, onde o cliente faz uma requisição para o servidor, obtém um xml como resposta e executa o que tem que executar. Após a execução, deve devolver para o servidor alguns dados. É nesse retorno que estou tendo problemas.

O método no servidor está assim:

@GET
@RequestMapping("/alerts/{agentId}/{lastExecutionDate}/{lastResultSet}")
@Consumes(XML_CONTENT_TYPE)
public void updateAlertByAgentId(@PathVariable String agentId, @PathVariable String lastExecutionDate, @PathVariable String lastResultSet) {
    System.out.println("update!");
    ... // do something!
 }

No cliente a implementação está assim:

public void update(int resultSetRowCount) {
	
    String date = timestamp.toString();
	
    String uri = "http://" + serverIp + ":" + serverPort + "/hrm/alerts/" + agentId + "/" + date + "/" + resultSetRowCount;
    
    System.out.println(uri);
	
    try {
        // create HTTP Client
        HttpClient httpClient = HttpClientBuilder.create().build();
		
        // Create new patchRequest with below mentioned URL
        HttpGet getRequest = new HttpGet();
		
        // Add additional header to patchRequest which accepts application/xml data
        getRequest.addHeader("accept", "application/xml");

        // Execute your request and catch response
        HttpResponse response = httpClient.execute(getRequest);
	
        // Check for HTTP response code: 200 = success
        if (response.getStatusLine().getStatusCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Eu não sei se o problema está no cliente, no servidor ou em ambos. Mas essa implementação no cliente retornou:

<a href="http://127.0.0.1:8080/hrm/alerts/xpto1/20160412144546/10" class="onebox" target="_blank">http://127.0.0.1:8080/hrm/alerts/xpto1/20160412144546/10</a>

Exception in thread “main” java.lang.NullPointerException

at     org.apache.http.impl.client.CloseableHttpClient.determineTarget(CloseableHttpClient.java:91)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)

at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)

at br.com.mentium.hrm.agent.service.UpdateServer.update(UpdateServer.java:63)

at br.com.mentium.hrm.agent.service.ProcessAlerts.execute(ProcessAlerts.java:37)

at br.com.mentium.hrm.agent.Agent.execute(Agent.java:90)

at br.com.mentium.hrm.agent.Agent.main(Agent.java:38)

Como fazer isso funcionar?

Obrigado!

3 Respostas

guivirtuoso

Faca o seguinte teste, tesnte acessar pelo browser esse endereco:
http://127.0.0.1:8080/hrm/alerts/xpto1/20160412144546/101

Se a resposta for positiva, você já sabe que a zica é do lado do cliente.

Caso contrário você já vai ver o erro do lado do servidor.

Vi ali que você ta tentando acessar esse endpoint REST usando httpclient. É uma boa abordagem, porém existem melhores.

Procure pela biblioteca RESTEasy, de uma estudada nela… é bem simples de implementar e pode ser que já resolva alguns problemas comuns que temos ao consumir URIs.

Abs

gtludwig

Amigo, obrigado pelo retorno. Realmente, quando fiz o teste em um browser, o método foi acessado.

Estou fazendo alguns testes chamando o link no browser para ver se consigo executar o método do servidor corretamente.

Obrigado pela dica! Vou dar uma olhada nesse RESTEasy depois!

gtludwig

Só faltou passar a uri…

getRequest.setURI(new URI(uri));

Bastava isso! Agora, tudo certo!

Criado 12 de abril de 2016
Ultima resposta 13 de abr. de 2016
Respostas 3
Participantes 2