Olá pessoal, depois de muito procurar sobre minha duvida ate consegui desenvolver alguma coisa, mas ainda não está como quero…
Tenho uma aplicação desktop com swing que se comunica com app web via Servlets usando o URLConnection ok?!
mais ou menos assim:
// meu objeto que implementa serializable
Bairro b = new Bairro();
b.setId(1);
// montanto o parametro onde o Parses.toString serializa o objeto em string com Encode64Base
String data = URLEncoder.encode("param", "UTF-8") + "=" + URLEncoder.encode(Parser.toString(b), "UTF-8");
URL url = new URL("http://localhot:8080/servlets/test?");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setAllowUserInteraction(false);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Recebendo a resposta do servlet
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
String outter = "";
while ((line = rd.readLine()) != null) {
outter = outter + line;
System.out.println(line);
}
wr.close();
rd.close();
// Converte a resposta novamente para Bairro...
b = (Bairro)Parser.fromString(outter);
System.out.println(b.getBaidescricao());
Eis a classe parser…
public class Parser {
/** Read the object from Base64 string. */
public static Object fromString(String s) throws IOException,
ClassNotFoundException {
byte[] data = Base64Coder.decode(s);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
data));
Object o = ois.readObject();
ois.close();
return o;
}
/** Write the object to a Base64 string. */
public static String toString(Serializable o) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return new String(Base64Coder.encode(baos.toByteArray()));
}
Meu servlet, le isso des-serializa o “param” para Bairro, executa uma pesquisa, serializa retorna o objeto novamente…
A questão é:
Consigo fazer isso de forma mais elegante? postando/gravando diretamente em bytes? como o upload de um arquivo eu acho… :?
Tambem penso que com params String, caso eu venha usar um List<?> serializado pode haver problemas com tamanho e os caracteres da codificação…
Não quero usar [color=red]XML[/color], nem [color=blue]EJB[/color] (pois uso Tomcat somente e a aplicação é relativamente simples)…
e uso URLConnection pois quanto menor ficar o jar da aplicação no cliente é melhor…
Alguem sugere algo ??
Obrigado desde já!!