Junção: Chat com XML

Olá pessoal, preciso de uma ajuda, como sou “noob” em java, gostaria de saber como posso mesclar o codigo de um chat para intranet com um leitor xml, explicando melhor: gostaria que um unico programa lê-se o arquivo xml e o mostre linha a linha pra cada “enter” pressionado dentro do chat. e esse chat que eu tenho ele nao possibilita mais de um cliente por vez, apenas um cliente e o servidor, e não sei fazer isso também, se dessem pra vocês me ajudarem em algum dos itens citados ou em todos rsrsrs, agradeceria muito…OBRIGADO e segue os códigos:

CHAT - CLIENTE

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Client extends JFrame
{
private JTextField enterField; //insere informações fornecidas pelo usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o servidor
private ObjectInputStream input; //gera fluxo de entrada a partir do servidor
private String message = “”; //mensagem do servidor
private String chatServer; //servidor de host para esse aplicativo
private Socket client; //socket para comunicação com o servidor

//inicializa chatServer e configura a GUI
public Client( String host )
{
super( “Client” );

 chatServer = host; //configura o servidor ao qual esse cliente se conecta

 enterField = new JTextField(); //cria enterField
 enterField.setEditable( false );
 enterField.addActionListener(
    new ActionListener()
    {
       //envia mensagem ao servidor
       public void actionPerformed( ActionEvent event )
       {
          sendData( event.getActionCommand() );
          enterField.setText( "" );
       } //fim do método actionPerformed
    } //fim da classe interna anônima
 ); //fim da chamada para addActionListener

 //add( enterField, BorderLayout.NORTH );
 getContentPane().add( enterField, BorderLayout.NORTH );

 displayArea = new JTextArea(); //cria displayArea
 getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );

 setSize( 300, 150 ); //configura o tamanho da janela
 setVisible( true ); //mostra a janela

} //fim do construtor Client

//conecta-se ao servidor e processa as mensagens a partir do servidor
public void runClient()
{
try //conecta-se ao servidor, obtém fluxos, processa a conexão
{
connectToServer(); //cria um Socket para fazer a conexão
getStreams(); //obtém os fluxos de entrada e saída
processConnection(); //processa a conexão
} //fim do try
catch (EOFException eofException)
{
displayMessage( “\nClient terminated connection” );
} //fim do catch
catch (IOException ioException)
{
ioException.printStackTrace();
} //fim do catch
finally
{
closeConnection(); //fecha a conexão
} //fim do finally
} //fim do método runClient

//conecta-se ao servidor
private void connectToServer() throws IOException
{
displayMessage( “Attempting connection\n” );

 //cria Socket para fazer a conexão ao servidor
 client = new Socket( InetAddress.getByName( chatServer ), 12345 );

 //exibe informações sobre a conexão
 displayMessage( "Connected to: " +
    client.getInetAddress().getHostName() );

} //fim do método connectToServer

//obtém fluxos para enviar e receber dados
private void getStreams() throws IOException
{
//configura o fluxo de saída para objetos
output = new ObjectOutputStream( client.getOutputStream() );
output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho

 //configura o fluxo de entrada para objetos
 input = new ObjectInputStream( client.getInputStream() );

 displayMessage( "\nGot I/O streams\n" );

} //fim do método getStreams

//processa a conexão com o servidor
private void processConnection() throws IOException
{
//ativa enterField de modo que o usuário cliente possa enviar mensagens
setTextFieldEditable( true );

 do //processa as mensagens enviadas do servidor
 {
    try //lê e exibe a mensagem
    {
       message = ( String ) input.readObject(); //lê uma nova mensagem
       displayMessage( "\n" + message ); //exibe a mensagem
    } //fim do try
    catch (ClassNotFoundException classNotFoundException )
    {
       displayMessage( "\nUnknown object type received" );
    } //fim do catch

 } while ( !message.equals( "SERVER>>> TERMINATE" ) );

} //fim do método processConnection

//fecha os fluxos e o socket
private void closeConnection()
{
displayMessage( “\nClosing connection” );
setTextFieldEditable( false ); //desativa enterField

 try
 {
    output.close(); //fecha o fluxo de saída
    input.close(); //fecha o fluxo de entrada
    client.close(); //fecha o socket
 } //fim do try
 catch ( IOException ioException )
 {
    ioException.printStackTrace();
 } //fim do catch

} //fim do método closeConnection

//envia mensagem ao servidor
private void sendData( String message )
{
try //envia o objeto ao servidor
{
output.writeObject( "CLIENT>>> " + message );
output.flush(); //esvazia os dados para saída
displayMessage( "\nCLIENT>>> " + message );
} //fim do try
catch ( IOException ioException )
{
displayArea.append( “\nError writing object” );
} //fim do catch
} //fim do método sendData

//manipula a displayArea na thread de despacho de eventos
private void displayMessage( final String messageToDisplay )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //atualiza a displayArea
{
displayArea.append( messageToDisplay ); //acrescenta a mensagem
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método displayMessage

//manipula o enterField na thread de despacho de eventos
private void setTextFieldEditable( final boolean editable )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //configura a editabilidade do enterField
{
enterField.setEditable( editable );
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método setTextFieldEditable
} //fim da classe Client

CHAT - SERVIDOR

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Server extends JFrame
{
private JTextField enterField; //insere a mensagem do usuário
private JTextArea displayArea; //exibe informações para o usuário
private ObjectOutputStream output; //gera fluxo de saída para o cliente
private ObjectInputStream input; //gera fluxo de entrada a partir do cliente
private ServerSocket server; //socket de servidor
private Socket connection; //conexão com o cliente
private int counter = 1; //contador do número de conexões

//configura a GUI
public Server()
{
super( “Server” );

  enterField = new JTextField(); //cria enterfield
  enterField.setEditable( false );
  enterField.addActionListener(
     new ActionListener()
     {
        //envia a mensagem ao cliente
        public void actionPerformed( ActionEvent event )
        {
           sendData( event.getActionCommand() );
           enterField.setText( "" );
        } //fim do método actionPerformed
     } //fim da classe interna anônima
  ); //fim da chamada para addActionListener

  //add( enterField, BorderLayout.NORTH );
  getContentPane().add( enterField, BorderLayout.NORTH );

  displayArea = new JTextArea(); //cria displayArea
  getContentPane().add( new JScrollPane( displayArea ), BorderLayout.CENTER );

  setSize( 300, 150 ); //configura o tamanho da janela
  setVisible( true ); //mostra a janela

} //fim do construtor Server

//configura e executa o servidor
public void runServer()
{
try //configura o servidor para receber conexões; processa as conexões
{
server = new ServerSocket( 12345, 100 ); //cria ServerSocket

     while ( true )
     {
        try
        {
           waitForConnection(); //espera uma conexão
           getStreams(); //obtém fluxos de entrada e saída
           processConnection(); //processa a conexão
        } //fim do try
        catch (EOFException eofException )
        {
           displayMessage( "\n Server terminated connection" );
        } //fim do catch
        finally
        {
           closeConnection(); //fecha a conexão
           counter++;
        } //fim do finally
     } //fim do while
  } //fim do try
  catch (IOException ioException )
  {
     ioException.printStackTrace();
  } //fim do catch

} // fim do método runServer

//espera que a conexão chegue e então exibe informações sobre a conexão
private void waitForConnection() throws IOException
{
displayMessage( “Waiting for connection\n” );
connection = server.accept(); //permite que o servidor aceite a conexão
displayMessage( " Connection " + counter + " received from: " +
connection.getInetAddress().getHostName() );
} //fim do método waitForConnection

//obtém fluxos para evitar a receber dados
private void getStreams() throws IOException
{
//configura o fluxo de saída para objetos
output = new ObjectOutputStream( connection.getOutputStream() );
output.flush(); //esvazia buffer de saída para enviar as informações de cabeçalho

  //configura o fluxo de entrada para objetos
  input = new ObjectInputStream( connection.getInputStream() );

  displayMessage( "\nGot I/O streams\n" );

} //fim do método getStreams

//processa a conexão com o cliente
private void processConnection() throws IOException
{
String message = “Connection successful”;
sendData( message ); //envia uma mensagem de conexão bem-sucedida

  //ativa enterField de modo que usuário doservidor possa enviar mensagens
  setTextFieldEditable( true );

  do //processa as mensagens enviadas pelo cliente
  {
     try //lê e exibe a mensagem
     {
        message = ( String ) input.readObject(); //lê uma nova mensagem
        displayMessage( "\n" + message ); //exibe a mensagem
     } //fim do try
     catch ( ClassNotFoundException classNotFoundException )
     {
        displayMessage( "\nUnknown object type received" );
     } //fim do catch

  } while ( !message.equals( "CLIENT>>> TERMINATE" ) );

} //fim do método processConnection

//fecha os fluxos e o socket
private void closeConnection()
{
displayMessage( "\nTerminating connection\n " );
setTextFieldEditable( false ); //desativa enterField

  try
  {
     output.close(); //fecha o fluxo de saída
     input.close(); //fecha o fluxo de entrada
     connection.close(); //fecha o socket
  } //fim do try
  catch ( IOException ioException )
  {
     ioException.printStackTrace();
  } //fim do catch

} //fim do método closeConnection

//envia a mensagem ao cliente
private void sendData( String message )
{
try //envia o objeto ao cliente
{
output.writeObject( "SERVER>>> " + message );
output.flush(); //esvazia a saída para o cliente
displayMessage( "\nSERVER>>> " + message );
} //fim do try
catch ( IOException ioException )
{
displayArea.append( “\nError writting object” );
} //fim do catch
} //fim do método sendData

//manipula a displayArea na thread de despacho de eventos
private void displayMessage( final String messageToDisplay )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //atualiza a displayArea
{
displayArea.append( messageToDisplay ); //acrescenta a mensagem
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método displayMessage

//manipula o enterField na thread de despacho de eventos
private void setTextFieldEditable( final boolean editable )
{
SwingUtilities.invokeLater(
new Runnable()
{
public void run() //configura a editabilidade do enterField
{
enterField.setEditable( editable );
} //fim do método run
} //fim da classe interna anônima
); //fim da chamada para SwingUtilities.invokeLater
} //fim do método setTextFieldEditable
} //fim da classe Server

XML

final class Sink extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ContentHandler
{
final private static void print ( final String context, final String text )
{
System.out.println( context + “: “” + text + “”.” );
}

final public void startElement   ( final String namespace, final String localname, final String type, final org.xml.sax.Attributes attributes )   throws org.xml.sax.SAXException
{
    print( "startElement", type );
}

final public void endElement   ( final String namespace, final String localname,      final String type )   throws org.xml.sax.SAXException
{
    print( "endElement  ", type );
}

final public void characters   ( final char[] ch, final int start, final int len )
{
    final String text = new String( ch, start, len );
    final String text1 = text.trim();
    if( text1.length() > 0 )
        print( "characters  ", text1 );
}

}

final class XML
{ /** create a new XML reader */
final public static org.xml.sax.XMLReader makeXMLReader() throws Exception
{
final javax.xml.parsers.SAXParserFactory saxParserFactory = javax.xml.parsers.SAXParserFactory.newInstance(); final javax.xml.parsers.SAXParser saxParser = saxParserFactory.newSAXParser(); final org.xml.sax.XMLReader parser = saxParser.getXMLReader(); return parser; }}

public class Teste {
public static void main( final String [] args ) throws Exception {
org.xml.sax.XMLReader reader = XML.makeXMLReader();
reader.setContentHandler( new Sink() );
reader.parse( new org.xml.sax.InputSource( “roteiro.xml” ));
}
}

Se postei errado alguma coisa me avisem por favor…OBRIGADO ^^

I NEED SOMEBODY HELPPPP

UP