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 ^^

EDIT - Por favor, use os tags [ CODE ] quando for postar código.

Ninguém -.-’ ???

Uppando pra ver se alguém ajuda