PDA

Visualizza la versione completa : [Java] controllo codice (era: Help X Tesi :-((((((((((((((((((()


postgresql
15-04-2004, 20:02
Ragazzi aiutatemi ...non riesco a compilare questo codice in java :-(((((((((((((((((( E' un server che deve ricevere dei messaggi sulla porta 2000 elaborarli attraverso delle procedure e generare dei messaggi di risposta tutto qui ma non ne vuole sapere!!! dovrei poi estenderlo per gestire il multithread!! Non mancheranno i ringraziamenti nella tesi :-)))))) . ( uso linux (per eseguire le query su DBMS Postresql) mandrake 9.1 con netbeans della sun)




/* CUP REMOTO Il cup considera solo i campi di tipo R*/


import java.net.*;
import java.io.*;
import java.sql.*;
import java.util.StringTokenizer;
import java.lang.*;

/** prova */
public class ServerCup

{

static Connection c = null;
static String rapporto = "";
static String delim1 = "\n";
static String escape = "" ;
static String delim2 = "|";
static int port=2000;
static String driver = "org.postgresql.Driver";
static String login = "antonio";
static String psw = "telemedicina";
static String database = "cup";
static String Message_Type = new String ();
static String Messagge_Control_id = new String () ;
static String Sending_Application = new String () ;
static String Sending_Facility = new String();




static String msh (int codice , String tipo_messaggio)

{
String MSH = new String ();
switch (codice)
{

case 1:
{
MSH = "MSH|^~"+escape+"&||CUP_APP|CUPREMOTO|"+Sending_Application+"|"+Sending_Facility+"|||"+tipo_messaggio+"|"+Messagge_Control_id+"||ver 2.3.1||\n";
}break;

case 2:
{
// MSH ="MSH|^~\&||CUP_APP|CUPREMOTO||||||||ver 2.3.1||\n";
}break;

}
return MSH;

}






static String dsp ( String Line )

{
String DSP = new String ();

switch (Line)
{
case S:
{
DSP = "|DSP|Il servizio Ŕ attualmente disponibile|\n" ;
}break;

case N:
{
DSP = "|DSP|Il servizio non Ŕ attualmente disponibile|\n" ;
}break;
// default DSP="DSP|"+Line+"|\n";

}


return DSP;

}





static String msa (String codice)

{
String MSA = new String ();
switch (codice)
{

case AA:
{
MSA = "MSA|AA|"+Message_Type+"||||\n";
}break;

case AR_r:
{
MSA = "MSA|AR|||||\n";
}break;

case AR_m:
{
MSA = "MSA|AR|"+Message_Type+"||||\n";
}break;
}
return MSA;
}





/*La tabella storico contiene tutte le informazioni relative
agli accessi effettuati al Server da parte dei client (ADT).*/


static void storico (Connection c, String tabella)
{

PreparedStatement ins = c.prepareStatement(" INSERT INTO " +tabella + " VALUES (?,?,?,?)");
ins.setString(Messagge_Control_id,Sending_Applicat ion,Sending_Facility ,Message_Type);
insert.executeUpdate();
}




static String connessione()

{
String message = new String ();
try

{

// Il serverSocket Ŕ una porta che aspetta che qualche cliente adt
// venga a bussare.

ServerSocket server = new ServerSocket(port);
System.out.print("....in attesa di connessioni dai sistemi adt");

// accept Ŕ bloccante fino all'arrivo di una connessione

Socket s = server.accept();

System.out.print("Connessione avvenuta con successo");
BufferedReaderinFromClient = new BufferedReader (new InputStreamReader(s.getInputStream()));
DataOutputStream outToClient = new DataOutputStream (s.getOutputStream ());
message = inFromClient.readLine();
}
catch (SQLException e)
{
printException ("Non riesco a connettermi con il Server CUP");
gestione_errore (1);
}
return message;

}





/*Il parser Ŕ in grado di prelevare dal messaggio i campi
o i segmenti a seconda del valore di delim. Ritorna un
vettore contenete i token.*/



static Vector parser (String mes_hl7,String delim)

{
Vector query = new Vector();
boolean returnDelims = false ;//non considera i separatori come token
StringTokenizer st = new StringTokenizer(mes_hl7,delim,returnDelims);
while (st.hasMoreTokens())

{
System.out.println(st.nextToken());
query.addElement(st.nextToken()) ;
}

return query ;
}






// Connessione al database



static Connection Conn ()
{
Connection c = null;
String dbUrl;
try {
Class.forName(driver);
}

catch (ClassNotFoundException e)

{
printException ("Non trovo la driver del database", e);
gestione_errore (1);
}

dbUrl = "jdbc:postgresql:" +database;
try {
c = DriverManager.getConnection(dbUrl, login , psw);
}
catch (SQLException e)
{
printException ("Non riesco a connettermi con il database " + database ,e);
gestione_errore (1);
}

textArea.appendText ("Connesso con il database " + database + "\n");
return c;

}

postgresql
15-04-2004, 20:11
...CONTINUO
//Original mode

static String Send_message_DSR (String disp ,Vector query ,String QRD , String QRF)

{

try
{

Message_Type = (String)query.elementAt(8); // va inserito in MSA
Messagge_Control_id = (String)query.elementAt(9); // identificativo unico della query
Sending_Application = (String)query.elementAt(2); // Applicazione che trasmette
Sending_Facility = (String)query.elementAt(3); // Istituzione che trasmette
String messaggiohl7out=msh(1,"DSR")+msa("AA")+QRD+delim1+QRF+delim1+dsp(disp);
outToClient.writeBytes (+messaggiohl7out);
}

catch (SQLException e)
{
System.out.println ("Non riesco ad inviare il messaggio");
System.out.println (e);
gestione_errore (1);
}
}




// Ricerca della disponibilitÓ nella tabella servizi



static String ricerca (String What_department_Data_Code)

{

try

{

PreparedStatement seleziona = c.prepareStatement("SELECT * FROM servizi WHERE id LIKE ?");
seleziona.setString(What_department_Data_Code);
ResultSet res=seleziona.executeQuery(); // conterrÓ la riga desiderata se presente
String disp = rs.getString("disponibilita");
seleziona.close ();
}


catch (SQLException e)
{
System.out.println ("Non riesco ad accedere alla tabella servizi");
System.out.println (e);
gestione_errore (1);
}



return disp;
}




/*Controllo . La procedura pu˛ essere estesa anche ad altri tipi di
segmenti. */


static String controllo_messaggio (String segmento ,String delim , int indice )

{
String flag="OK";
StringTokenizer segment = new StringTokenizer(segmento,delim);
int count = fields.countTokens ( );
count=count-1;
String tipo = fields.nextToken ( );
switch (indice)
{
case 1 : //MSH

{
if (count!=20 || tipo!="MSH")
{
flag=" - Errore nel segmento MSH";
}
} break;

case 2 : //QRD

{
if (count!=12 || tipo!="QRD")
{
flag=" - Errore nel segmento QRD";
}
}break;

case 3 : //QRF

{
if (count!=9 || tipo!="QRF")
{
flag=" - Errore nel segmento QRF";
}
}break;
}



return flag;
}





static void gestione_errore (int errore )

{

switch (errore)
{
case 1 :

{
messaggiohl7out = msh (2,"")+msa("AR_r");
outToClient.writeBytes (+messaggiohl7out);

}break;

case 2 :

{
messaggiohl7out=msh(1,"ACK")+msa("AR_m")+err();
outToClient.writeBytes (+messaggiohl7out);
}break;


}



}


...Continua

postgresql
15-04-2004, 20:11
static String err()

{
String ERR = new String ();
return ERR ="ERR|"+rapporto+"\n";

}






public static void main (String argv[])

{

// Il server si pone in attesa di richieste di connessione da parte dei client
// restituisce quindi un messaggio hl7

String mes_hl7 = connessione ();


// I segmenti saranno contenuti nel vettore query


// I segmenti QRD e QRF saranno ripetuti nel messaggio di risposta DSR esattamente come quelli
// nel messaggio QRD^Q01 come da specifica.

Vector query = parser (mes_hl7,delim1);


/*Controllo validitÓ messaggio . La procedura controlla che :

1) il numero di campi presenti nel segmento siano in numero pari a quelli
specificati dallo standard HL7

2) il tipo di segmento*/

for (int i=0; i<=2; i++)
{
rapporto = rapporto+controllo_messaggio ((String)query.elementAt(i), delim1 , i);
}
if (rapporto!="OKOKOK")
{
gestione_errore (2);
}
else
{
String MSH = (String)query.elementAt(0);
String QRD = (String)query.elementAt(1);
String QRF = (String)query.elementAt(2);

//prelevo i campi del MSH della query

Vector query = parser (MSH,delim2);

// mi connetto al database cup remoto

c = Conn ();

// prelevo lo stato del servizio (disponibilitÓ)

String Data_Line = ricerca (What_department_Data_Code);

//invio il messaggio DSR al client

Send_message_DSR (Data_Line , query , QRD , QRF);
}
}
}



ServerCup.java [177:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
static Vector parser (String mes_hl7,String delim)
^
ServerCup.java [236:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
static String Send_message_DSR (String disp ,Vector query ,String QRD , String QRF)
^
ServerCup.java [67:1] incompatible types
found : java.lang.String
required: int
switch (Line)
^
ServerCup.java [69:1] cannot resolve symbol
symbol : variable S
location: class ServerCup
case S:
^
ServerCup.java [74:1] cannot resolve symbol
symbol : variable N
location: class ServerCup
case N:
^
ServerCup.java [95:1] incompatible types
found : java.lang.String
required: int
switch (codice)
^
ServerCup.java [98:1] cannot resolve symbol
symbol : variable AA
location: class ServerCup
case AA:
^
ServerCup.java [103:1] cannot resolve symbol
symbol : variable AR_r
location: class ServerCup
case AR_r:
^
ServerCup.java [108:1] cannot resolve symbol
symbol : variable AR_m
location: class ServerCup
case AR_m:
^
ServerCup.java [128:1] setString(int,java.lang.String) in java.sql.PreparedStatement cannot be applied to (java.lang.String,java.lang.String,java.lang.Strin g,java.lang.String)
ins.setString(Messagge_Control_id,Sending_Applicat ion,Sending_Facility ,Message_Type);
^
ServerCup.java [129:1] cannot resolve symbol
symbol : variable insert
location: class ServerCup
insert.executeUpdate();
^
ServerCup.java [154:1] cannot resolve symbol
symbol : variable BufferedReaderinFromClient
location: class ServerCup
BufferedReaderinFromClient = new BufferedReader (new InputStreamReader(s.getInputStream()));
^
ServerCup.java [156:1] cannot resolve symbol
symbol : variable inFromClient
location: class ServerCup
message = inFromClient.readLine();
^
ServerCup.java [160:1] cannot resolve symbol
symbol : method printException (java.lang.String)
location: class ServerCup
printException ("Non riesco a connettermi con il Server CUP");
^
ServerCup.java [180:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
Vector query = new Vector();
^
ServerCup.java [180:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
Vector query = new Vector();
^
ServerCup.java [213:1] cannot resolve symbol
symbol : method printException (java.lang.String,java.lang.ClassNotFoundException )
location: class ServerCup
printException ("Non trovo la driver del database", e);
^
ServerCup.java [223:1] cannot resolve symbol
symbol : method printException (java.lang.String,java.sql.SQLException)
location: class ServerCup
printException ("Non riesco a connettermi con il database " + database ,e);
^
ServerCup.java [227:1] cannot resolve symbol
symbol : variable textArea
location: class ServerCup
textArea.appendText ("Connesso con il database " + database + "\n");
^
ServerCup.java [248:1] operator + cannot be applied to java.lang.String
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [248:1] cannot resolve symbol
symbol : variable outToClient
location: class ServerCup
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [275:1] setString(int,java.lang.String) in java.sql.PreparedStatement cannot be applied to (java.lang.String)
seleziona.setString(What_department_Data_Code);
^
ServerCup.java [277:1] cannot resolve symbol
symbol : variable rs
location: class ServerCup
String disp = rs.getString("disponibilita");
^
ServerCup.java [291:1] cannot resolve symbol
symbol : variable disp
location: class ServerCup
return disp;
^
ServerCup.java [306:1] cannot resolve symbol
symbol : variable fields
location: class ServerCup
int count = fields.countTokens ( );
^
ServerCup.java [308:1] cannot resolve symbol
symbol : variable fields
location: class ServerCup
String tipo = fields.nextToken ( );
^
ServerCup.java [357:1] cannot resolve symbol
symbol : variable messaggiohl7out
location: class ServerCup
messaggiohl7out = msh (2,"")+msa("AR_r");
^
ServerCup.java [358:1] cannot resolve symbol
symbol : variable messaggiohl7out
location: class ServerCup
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [358:1] cannot resolve symbol
symbol : variable outToClient
location: class ServerCup
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [365:1] cannot resolve symbol
symbol : variable messaggiohl7out
location: class ServerCup
messaggiohl7out=msh(1,"ACK")+msa("AR_m")+err();
^
ServerCup.java [366:1] cannot resolve symbol
symbol : variable messaggiohl7out
location: class ServerCup
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [366:1] cannot resolve symbol
symbol : variable outToClient
location: class ServerCup
outToClient.writeBytes (+messaggiohl7out);
^
ServerCup.java [406:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
Vector query = parser (mes_hl7,delim1);
^
ServerCup.java [432:1] cannot resolve symbol
symbol : class Vector
location: class ServerCup
Vector query = parser (MSH,delim2);
^
ServerCup.java [440:1] cannot resolve symbol
symbol : variable What_department_Data_Code
location: class ServerCup
String Data_Line = ricerca (What_department_Data_Code);
^
35 errors
Errors compiling ServerCup.

V1RuZ
15-04-2004, 20:14
ma quanto ne capisci di java?
Nella lista degli errori ce ne sono alcuni stupidi


PS modifica il titolo

civico3
16-04-2004, 12:16
intanto aggiungi
import java.util.Vector;

civico3
16-04-2004, 12:33
sostituisci al metodo static String dsp ( String Line ) questo metodo:

static String dsp ( String Line )

{
String DSP = new String ();
if(Line.equals("S")){
DSP = "|DSP|Il servizio Ŕ attualmente disponibile|\n" ;
}else if(Line.equals("N")){
DSP = "|DSP|Il servizio non Ŕ attualmente disponibile|\n" ;
}

return DSP;

}

utilizza lo stesso sistema per il metodo: static String msa (String codice)


controlla sulla documentazione se PreparedStatement ha un metodo setString che accetta i pqrametri che gli passi (il caso Ŕ questo):
static void storico (Connection c, String tabella)
{

PreparedStatement ins = c.prepareStatement(" INSERT INTO " +tabella + " VALUES (?,?,?,?)");
ins.setString(
ins.setString(Messagge_Control_id,Sending_Applicat ion,Sending_Facility ,Message_Type);
insert.executeUpdate();
}

poi ricompila e vediamo cosa altro Ŕ da fare....

xegallo
16-04-2004, 12:55
postgresql cerca di fare dei titoli + comprensivi prossimamente

postgresql
16-04-2004, 23:09
si scusate mi sono fatto prendere dal panico ...cmq i molti errori erano abbastanza stupidi :-)))) ora per˛ quando lancio il progr mi divide si' il messaggio in 3 token che mi vengono stampati correttamente ma non me li ritrovo nel vettore ; questa Ŕ la funzione incriminata:

static Vector parser (String mes_hl7,String delim)

{

Vector query = new Vector();
StringTokenizer st = null ;
boolean returnDelims = false ;//non considera i separatori come token
System.out.println("Messaggio in arrivo dal client "+mes_hl7);
try
{
st = new StringTokenizer(mes_hl7,delim,returnDelims);
}
catch(Exception e){System.out.println("Errore in token");
}

try
{

while (st.hasMoreTokens()!=false)

{

System.out.println(st.nextToken());


}


}


catch(Exception e){
System.out.println("Errore in token"); }

try
{

while (st.hasMoreTokens()!=false)

{

query.addElement(st.nextToken()) ;


}


}


catch(Exception e){
System.out.println("Errore in token"); }


return query ;


}

Sergio Pedone
16-04-2004, 23:54
Inserisci la linea di codice in cui aggiungi i token
all'oggetti query prima/dopo la stampa a video:
Nel tuo codice, una volta stampati i token a video,
il controllo sulla disponibilitÓ di token da un
risultato falso. Di conseguenza il ciclo di aggiunta
elementi non viene mai eseguito.
Riporto un'estratto del codice da utilizzare:


{
Vector query = new Vector();
StringTokenizer st = null;
boolean returnDelims = false;
System.out.println("Messaggio in arrivo dal client " + mes_hl7);

try {
st = new StringTokenizer(mes_hl7, delim, returnDelims);
} catch (Exception e) {
System.out.println("Errore in token");
}

try {
while (st.hasMoreTokens()!=false) {
String token = st.nextToken();
System.out.println(token);
query.addElement(token);
}
} catch(Exception e) {
System.out.println("Errore in token");
}

return query ;
}

Ho cercato di stravolgere il meno possibili quello
che era il tuo codice.

Ciao.

postgresql
17-04-2004, 00:13
Innanzitutto Grazie mille x la disponibilitÓ ora prova provo cosi' . La stampa dei token non Ŕ necessaria l'ho usata solo per vedere se i token venivano prelevati correttamente dalla stringa . quindi la stampa mi blocca la memorizzazione nel vettore mah strano cmq ora ci d˛ un occhiata tempus sfuggi!!!! :-)

Loading