import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.MappingJsonFactory;
import org.codehaus.jackson.map.ObjectMapper;
public class ClientWS {
public static Object getObjeto(Class tipoObjetoRetorno, String urlWebService, String... parametros) {
Object objetoRetorno = null;
try {
for(String parametro: parametros){
urlWebService = urlWebService + "/" + parametro.replaceAll(" ", "%20");
}
URL url = new URL(urlWebService);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(15000);
connection.setRequestProperty("login", "teste");
connection.setRequestProperty("senha", "teste");
connection.connect();
String responseJson = inputStreamToString(connection.getInputStream());
connection.disconnect();
return fromJson(responseJson, tipoObjetoRetorno);
} catch (Exception e) {
e.printStackTrace();
}
return objetoRetorno;
}
public static Object postObjeto(Object objetoEnvio, Class tipoObjetoRetorno, String urlWebService) {
Object objetoRetorno = null;
try {
String requestJson = toJson(objetoEnvio);
URL url = new URL(urlWebService);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setConnectTimeout(15000);
connection.setRequestProperty("login", "teste");
connection.setRequestProperty("senha", "teste");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
connection.setRequestProperty("Content-Length", Integer.toString(requestJson.length()));
DataOutputStream stream = new DataOutputStream(connection.getOutputStream());
stream.write(requestJson.getBytes("UTF-8"));
stream.flush();
stream.close();
connection.connect();
String responseJson = inputStreamToString(connection.getInputStream());
connection.disconnect();
objetoRetorno = fromJson(responseJson, tipoObjetoRetorno);
} catch (Exception e) {
e.printStackTrace();
}
return objetoRetorno;
}
public static String inputStreamToString(InputStream is) throws IOException {
if (is != null) {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
return writer.toString();
} else {
return "";
}
}
public static String toJson(Object objeto) throws Exception {
ObjectMapper mapper = new ObjectMapper();
StringWriter jsonValue = new StringWriter();
mapper.writeValue(new PrintWriter(jsonValue), objeto);
return jsonValue.toString();
}
public static Object fromJson(String json, Class objectClass) throws Exception {
JsonFactory f = new MappingJsonFactory();
JsonParser jp = f.createJsonParser(json);
Object obj = jp.readValueAs(objectClass);
return obj;
}
}
sábado, 9 de junho de 2012
Consumindo Web Services REST
Se você precisa consumir Web Services REST que utilizam JSON na requisição e na resposta, abaixo tem um exemplo de classe completa em Java que realiza GETs e POSTs em um determinado serviço. Também utilizei os métodos de transformação em JSON que mostrei em outro post.
Assinar:
Postar comentários (Atom)
Boa tarde Rafael, interessante sua classe, porém fiquei com algumas dúvidas:
ResponderExcluirgetObjeto(
Class tipoObjetoRetorno,// que dado devo informar?
String urlWebService,//url, ok
String... parametros//parametros de onde?
)
Agradeço a atenção, estas dúvidas, são por que sou iniciante e preciso de algumas explicações.
Obrigado!
Ola Samuka eu sou iniciante tambem, mas acredito que esse Class seja a Estrutura da sua classe Model
ResponderExcluirEx.: Usuario.class
String... parametros, você passara o array de string do header do endpoint
Ex.: http:...usuarios/usuario%20data%20
Ainda não implementei a classe do Rafael, mas acredito ser isso, boa sorte com seus estudos (o/)