[quote=Insônia]Olá Amigo,
estou acompanhando este post, e talvez possa te ajudar. Eu já realizei uma implementacao para um problema parecido com o seu. Eu tinha um applet que integrava-se a biblioteca Finger [da empresa Griaule] (biblioteca de captura e reconhecimento de digital). Esse applet capturava a digital e enviava o template para uma Servlet processar. O trecho de codigo abaixo mostra como realizei isso no applet e no server.
applet:
URL url = new URL(urlBusca);
URLConnection conn = url.openConnection();
//Prepare for both input and output
conn.setDoInput(true);
conn.setDoOutput(true);
//Turn off caching
conn.setUseCaches(false);
//Set the content type to be java-internal/classname
conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
ObjectOutputStream out = new ObjectOutputStream(conn.getOutputStream());
//emvia template
out.writeObject(template);
out.flush();
out.close();
//recupera o retorno vindo do server
InputStream ins = conn.getInputStream();
ObjectInputStream objin = new ObjectInputStream(ins);
//le a resposta do server
cidadaoId = (Integer)objin.readObject();
No server, utilizo uma Servlet que faz o inverso:
servlet.doPost
ObjectInputStream objin = new ObjectInputStream(request.getInputStream());
//recupera template
Template template = (Template) objin.readObject();
//AQUI VC TEM O TEMPLATE... basta utilizar a biblioteca para valida-lo
ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
out.writeObject(cidadaoId);
out.flush();
out.close();
Nao tive problemas com versao de JRE (talvez por sorte, nao sei…), nem tive problemas por criar um ObjectOutputStream diretamente do OutputStream vindo do URLConnection (idem…rs).
Mas acho que as dicas do thingol sao uteis e podem ser adaptadas facilmente ao codigo que estou postando.
Se vc nao estiver utilizando a biblioteca da Griaule, entao talvez tenha que realizar outras adaptaçoes… Caso nao esteja utilizando, vc poderia me dizer qual biblioteca utiliza? Eu só conheco a Finger, e gostaria de conhecer outras…
Espero ter ajudado![/quote]
Olá Insonia,
Exatamente, eu uso a biblioteca da Griaule, Eu tive que deixar de usar Applet porque eu tive muito problema, então acabei fazendo uma aplicação desktop e como eu disse antes, está dando mais problemas também hehe. Vou testar o seu código mas parece que está igual o meu. Eu apenas fiz um de teste retornando uma lista que é modificada pelo servlet e retorna pra aplicação com essa alteração. Veja:
Swing:
package classes;
import java.io.*;
import java.net.*;
import java.util.*;
public class ObjAuth {
public static void main(String[] args) {
String urlName = "http://localhost:8084/TesteServlet/";
Object inObj = null; // objeto enviado da entrada
Object outObj = null; // objecto que sera enviado a saida
List<String> lista = new ArrayList<String>();
lista.add("XIKO BRASILEIRO");
lista.add("MANOEL SERIAL KILLER");
lista.add("POG MASTER");
lista.add("ALGUMA COISA");
lista.add("LAUDIVINO VIEIRA");
inObj = lista;
outObj = validaPeao(inObj, urlName); // faz a coisa
if (outObj instanceof List) {
List retornoLista = (List)outObj;
System.out.println("====================");
System.out.println(" RETORNOU UMA LISTA");
System.out.println("====================\n");
for(Object obj: retornoLista) {
System.out.println(" " + obj);
}
} else {
System.out.println("RETORNOU OUTRA COISA "+ outObj);
}
}
public static Object validaPeao(Object inObj, String urlName) {
Object outObj = null; // objecto que sera enviado a saida
try {
URL url = new URL(urlName);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
ObjectOutputStream out = new ObjectOutputStream(connection.getOutputStream());
out.writeUnshared(inObj);
out.flush();
out.close();
byte buffer[] = new byte[1024];
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
int size = connection.getInputStream().read(buffer);
while(size > 0) {
byteOutput.write(buffer,0,size);
size = connection.getInputStream().read(buffer);
}
connection.getInputStream().close();
connection.disconnect();
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOutput.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
outObj = in.readUnshared();
byteOutput.close();
byteOutput.flush();
byteIn.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return outObj;
}
}
Servlet:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ObjServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ObjectInputStream in = new ObjectInputStream(request.getInputStream());
ObjectOutputStream out = null;
try {
// lendo da entrada
Object inObj = in.readUnshared(); // objeto enviado da entrada
Object outObj = null; // objecto que sera enviado a saida
// manipulando os objetos
outObj = validarPeao(inObj);
// escrevendo na saida
out = new ObjectOutputStream(response.getOutputStream());
out.writeUnshared(outObj);
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
out.flush();
out.close();
}
}
@Override
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
doGet(arg0, arg1);
}
private static Object validarPeao(Object inObj) {
Object outObj = null;
if (inObj instanceof List) {
List entradaLista = (List)inObj;
String[] auxLista = new String[entradaLista.size()];
for(int i=0; i<entradaLista.size(); i++) {
auxLista[i] = entradaLista.get(i).toString();
}
Arrays.sort(auxLista);
List<String> retornoList = new ArrayList<String>();
for(int i=0; i<auxLista.length; i++) {
retornoList.add("[POGGER] " + auxLista[i]);
}
outObj = retornoList;
}
return outObj;
}
}
Eu também gostaria de saber se existe outra biblioteca pra trabalhar além da Finger.