Archivio

Archivio per la categoria ‘java’

Proxy JSP

25 Novembre 2011 Nessun commento

In linea generale non è bene che uno script Javascript possa accedere ai dati di un sito remoto, ed infatti i browser lo impediscono.

In alcuni casi, però, può essere comodo aggirare questa limitazione: ad esempio state sviluppando un’applicazione ajax che usa i dati messi a disposizione da un webserver, ma non potete lavorare direttamente sul server in questione. Siccome mi sono trovato in questa situazione, ho rimediato con questo semplice proxy jsp che non fa altro che ricevere le chiamate ajax, rigirarle al server remoto e riprodurre il risultato.

Nel mio caso si trattava di consumare dei servizi soap, quindi di spedire/ricevere dati xml; ho  impostato nel codice Javascript l’indirizzo del proxy e nel proxy l’url dell’enpoint finale e tutto è filato a meraviglia.

<%@ page    import="java.io.*, java.net.*"  contentType="text/xml; charset=UTF-8" trimDirectiveWhitespaces="true" %>
<%
StringBuffer sbf = new StringBuffer();
StringBuffer data =  new StringBuffer();
String inputLine;

try {

    BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));
    while ( (inputLine = in.readLine()) != null) data.append(inputLine);
    in.close();

    URL url = new URL("http://?.?.?.?:8080/axis2/services/Servizio.ServizioHttpSoap11Endpoint/");
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Content-Type", "text/xml; charset=\"utf-8\"");
    conn.setDoOutput(true);
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data.toString());
    wr.flush();

    in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while ( (inputLine = in.readLine()) != null) {sbf.append(inputLine); }
    wr.close();
    in.close();

} catch (MalformedURLException e) {

   StringWriter sw = new StringWriter();
   PrintWriter pw = new PrintWriter(sw, true);
   e.printStackTrace(pw);
   pw.flush();
   sw.flush();
   out.print("<br>MalformedURLException: "+sw.toString());

} catch (IOException e) {

   StringWriter sw = new StringWriter();
   PrintWriter pw = new PrintWriter(sw, true);
   e.printStackTrace(pw);
   pw.flush();
   sw.flush();
   out.print("<br>IOException: "+sw.toString());

}

%>
<%= sbf.toString() %>
Categorie:java, programmazione Tag: