Newsgroup: it.comp.java
Titolo: HELP: XML e RPC

Buongiorno a tutti sono nuovo del NG, avrei un problemino e sto cercando 
aiuto.
Dunque, in poche parole devo creare un'applettina che non fa altro che 
inviare un file XML di questo tipo:
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>
<ralink type='request' version='1.0'>
	<ping>
		<message>PING</message>
	</ping>
</ralink>
Ad un server ralink in ascolto sull porta 8088.Tale server dovrebbe 
rispondere a questa richiesta in questo modo:
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?>
<ralink type="response" version="1.0">
	<ping>
		<message>PING</message>
	</ping>
</ralink>
Io ho provato a creare questa applett. ma non ottengo mai nessuna 
risposta dal server.
Vi allego il codice e un piccolo estratto del manuale che può essere utile.
-------Manual------
Il protocollo di trasporto utilizzato è HTTP/1.0; il metodo utilizzato è 
POST. Ogni richiesta e risposta hanno un header HTTP con i seguenti 
campi obbligatori:
Content-Type: application/ralink
Content-Lenght:…
I parametri della richiesta e della risposta si trovano 
nell'entity-body, che contiene il messaggio ralink codificato nel 
linguaggio XML.
Il messaggio HTTP va inviato alla URL:
<RALinkProxy>/ralink
dove < RALinkProxy > è l’indirizzo IP o il nome della macchina su cui 
gira il Proxy RALink
------Codice da modificare--------
import java.awt.TextArea;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.net.*;
import java.io.*;
public class Testo extends Applet implements ActionListener
{
Button b=new Button("Invia");
TextArea TA=new TextArea();
TextArea TB=new TextArea();
public void init()
{
add(TA,BorderLayout.NORTH);
add(b,BorderLayout.CENTER);
add(TB,BorderLayout.SOUTH);
String t=getParameter("testo");
if (t!=null) TA.setText(t);
b.addActionListener(this);
}
public String getResponse(String xml) {
     String risp = "nessuna risposta valida";
     try {
       URL ralink =  new URL("
http://ra2000/ralink:8088
");
       URLConnection conn = ralink.openConnection();
	  HttpURLConnection connection = (HttpURLConnection) conn;
       connection.setRequestMethod("POST");
	  connection.setDoOutput(true);
	  connection.setDoInput(true);
	  OutputStream out = connection.getOutputStream();
       OutputStreamWriter wout = new OutputStreamWriter(out, "UTF-8");
       wout.write(xml);
       wout.close();
       DataInputStream in = new 
DataInputStream(connection.getInputStream());
       risp=in.readLine();
       in.close();
     } catch(MalformedURLException mue) {
       showStatus("Illegal URL: " + mue);
     } catch(IOException ioe) {
       showStatus("IOException: " + ioe);
     } catch(Exception e) {
       showStatus("Error: " + e);
     }
     return(risp);
   }
public void actionPerformed(ActionEvent e)
          {
               if (e.getSource() == b) {
				String xml = TA.getText();
				if(xml.equals("")){TB.setText("Devi inserire una richiesta in XML!!");}
				else {TB.setText(getResponse(xml));}				
			  }
		 }
}
grazie a tutti dell'aiuto in anticipo.
-- 
Ing. Alessio Padovani

risposta dal server.
Il server con cui ti connetti è lo stesso da cui il browser ottiene
l'applet? In caso negativo avrai una security exception che impedirà
la connessione...

non uso un browser per il momento, ma l'appletviewer a riga di 
comando... non so se sia la stessa cosa comunque l'errore che mi da 
adesso è il seguente:
Error:java.security.AccessControlException: access denied 
(java.net.SocketPermission ra2000 resolve)
Può essere l'errore che dici tu?
Maurizio Testa wrote:

-- 
Ing. Alessio Padovani

Puň essere l'errore che dici tu?
Sě. Lo č.

 Sì. Lo è.

Grazie maurizio, ma come posso risolvere questo problema allora?
Firma l'Applet.

Per firmare l'applet ci sono un bel pò di cosine delicate da fare, se 
invece di un'applet creassi una classe con interfaccia gui risolverei il 
problema in modo piu semplice?
io alla fine ho solo bisogno di una textarea dove incollare le richieste 
XML e una dove leggere i response del server.....
Che ne dici?
scusa se ti stresso
ale


problema in modo piu semplice?
Se non hai bisogno di accedere all'applicazione dal web, una classe
"standalone" è la soluzione più semplice.