Actualizado -- Ejemplo de WebService con Base de Datos -- Resuelto a la mitad

Hola a todos anteriorme les pedi ayuda para que me ayudaran a resolver un problemilla que tuve con un web service que estaba desarrollando pero no recibi respuesta.
Bueno ahora les pido si alguno de ustedes tiene un algun webservice hecho que utilice en conjunto una base de datos ps me hago el favor de decirme ¿como lo hicieron? y detalles de las herramientas que utilizaron sin mas quedo pendiente de sus comentarios

Actualizado el 05 julio 2010

Web Service - Base de Datos

Hola a todos, primero que nada espero que estén bien, no supe si este es el lugar correcto
para poner lo que les mostrare pero espero les pueda servir y a la vez me ayuden con un
problema que tengo, voy a tratar de ser explicito para que lo puedan seguir.

Quiero que sepan no soy el autor original del ejemplo que les voy a poner, pero creo que lo voy a complementar

La fuente de la información la pueden consultar AQUI

Propósito:

    Crear un web service y consumirlo

Entorno:

    Windows XP, Java SE 6, MySql 5.1, Axis2 1.5, Tomcat 6, IDE --usen el que quieran casi para todos es similar--

Instalacion:

Java: (yo creo que desde 1.5 esta bien)

    Yo baje la versión 1.6 con el instalador de Windows y todo lo que hice fue darle siguiente… siguiente etc
    Reside en C:\Archivos de programa\Java

Tomcat: baje la version 6 que ya viene con un instalador de Windows

    Reside en C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0

Axis2: yo baje los binarios uno que es un .war y otro donde viene todo (/lib /conf etc.)

    Los baje de AQUI

    Baje el zip del que dice (1) Standard binary distribution y el zip que dice (2)WAR Web Archive Distribution
    Descomprimí ambos (1) lo puse en C:\Archivos de programa\ Y debería quedarles C:\Archivos de programa\axis2-1.5.1-bin\axis2-1.5.1
    Y (2) lo puse en C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0\webapps

MySql: yo instale MySql Server Community Edition baje la versión 1.5 con instalador de Windows

    Como un consejo si piensan utilizar la aplicación como cliente servidor, o no se ,que no sea solo local,
    en el proceso de configuración palomeen la casilla de permitir al root conectarse remotamente (en el caso de que conecten como root)

También bajen el jar de mysqlconnector para java

Levanten el servicio de Apache Tomcat

    Si todo va bien deberian ser capaces de ver lo siguiente en

http://localhost:8080

Y despues en http://localhost:8080/axis2

Asegúrense de poder ver el servidor corriendo y también Axis2

Proceso:

    Creen una base de datos que se llame dbsample con una tabla que se llame Person

        CREATE TABLE PERSON (ID INTEGER NOT NULL,
    NAME VARCHAR (100) NOT NULL,
    ADDRESS VARCHAR (500),
    AGE INTEGER,
    PRIMARY KEY (ID));

Poblenla ejmplo:

INSERT INTO PERSON (ID, NAME, ADDRESS, AGE)
    VALUES (1, "hugo garcia", "en algun lugar", 27)
        INSERT INTO PERSON (ID, NAME, ADDRESS, AGE)
    VALUES (2, "java mexico ", "en la web", 30)
        INSERT INTO PERSON (ID, NAME, ADDRESS, AGE)
    VALUES (3, "alguien mas", "en todas partes", 37)

Una vez creada la base y poblada con algunos datos

Vayamos a nuestro editor de Java(les repito usen el que quieran casi en todos va a ser parecido yo use JCreator
pero es casi lo mismo en NetBeans o Eclipse o como los machos con notepad jajaj)

Configuren su editor y añadan las librerías en este caso jars para que compile correctamente deben añadirç
las que vienen en C:\Archivos de programa\axis2-1.5.1-bin\axis2-1.5.1\lib(no todas se usan pero para no tener que adivinar)
Y también añadan
mysql-connector-java-5.1.13-bin

Luego lo que haremos sera crear una clase que se llamara Person y tendra lo siguiente:

        package dbsample;

        public class Person {
    private  String name;
    private int id;
    private String address;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

    Otra clase que se llamara NameAge
       
        package dbsample;

            public class NameAge {
        private String name;
        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }    

    Creamos una clase que se llamara PersonDBService ojo donde va("jdbc:mysql://IP/dbsample","root", "root");
    		Por IP sustituyan su IP (ej. 100.100.100.100) o localhost
     
    package dbsample;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.sql.*;

    public class PersonDBService {

        public Person[] listAllPeople() {

            Connection conn=null;

            try{
                     Class.forName("com.mysql.jdbc.Driver");
                     conn = DriverManager.getConnection ("jdbc:mysql://IP/dbsample","root", "root");
            }
            catch(SQLException ex){ex.printStackTrace();}
            catch(ClassNotFoundException exx){exx.printStackTrace();}

            if(conn !=null) {
                String SQL = "SELECT * FROM PERSON";
                try {
                    PreparedStatement statement = conn.prepareStatement(SQL);
                    ResultSet result = statement.executeQuery();
                    ArrayList list = new ArrayList();
                    while (result.next()) {
                        Person person = new Person();
                        person.setId(result.getInt("ID"));
                        person.setName(result.getString("NAME"));
                        person.setAddress(result.getString("ADDRESS"));
                        person.setAge(result.getInt("AGE"));
                        list.add(person);
                    }
                    return (Person[])list.toArray(new Person[list.size()]);
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            return null;
        }

        public String[] listPeopleNames() {
                            Connection conn=null;
            try{
                     Class.forName("com.mysql.jdbc.Driver");
                     conn = DriverManager.getConnection ("jdbc:mysql://IP/dbsample","root", "root");
            }
            catch(SQLException ex){ex.printStackTrace();}
                    catch(ClassNotFoundException exx){exx.printStackTrace();}

            if(conn !=null) {
                String SQL = "SELECT NAME FROM PERSON";
                try {
                    PreparedStatement statement = conn.prepareStatement(SQL);
                    ResultSet result = statement.executeQuery();
                    ArrayList list = new ArrayList();
                    while (result.next()) {
                        list.add(result.getString("NAME"));
                    }
                    return (String[])list.toArray(new String[list.size()]);
                } catch (SQLException e) {
                    e.printStackTrace();
                }

            }
            return null;
        }

        public NameAge getNameAge(int id) {
            Connection conn=null;

              try{
                     Class.forName("com.mysql.jdbc.Driver");
                     conn = DriverManager.getConnection ("jdbc:mysql://IP/dbsample","root", "root");
            }
            catch(SQLException ex){ex.printStackTrace();}
            catch(ClassNotFoundException exx){exx.printStackTrace();}

            if(conn !=null) {
                String SQL = "SELECT NAME , AGE FROM PERSON WHERE ID=?";
                try {
                    PreparedStatement statement = conn.prepareStatement(SQL);
                    statement.setInt(1, id);
                    ResultSet result = statement.executeQuery();
                    if (result.next()) {
                        NameAge nameAge = new NameAge();
                        nameAge.setName(result.getString("NAME"));
                        nameAge.setAge(result.getInt("AGE"));
                        return nameAge;
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        public void insertPerson(int id, String name, String address,int age) {

              Connection conn = null;

              try{
                     Class.forName("com.mysql.jdbc.Driver");
                     conn = DriverManager.getConnection ("jdbc:mysql://IP/dbsample","root", "root");
            }
            catch(SQLException ex){ex.printStackTrace();}
            catch(ClassNotFoundException exx){exx.printStackTrace();}

            if(conn !=null) {
                String SQL = "INSERT INTO PERSON (ID , NAME , ADDRESS , AGE) VALUES (?,?,?,?)";
                try {
                    PreparedStatement statement = conn.prepareStatement(SQL);
                    statement.setInt(1,id);
                    statement.setString(2,name);
                    statement.setString(3,address);
                    statement.setInt(4,age);
                    statement.executeUpdate();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    Y por ultimo la clase DBSampleServiceLifeCycle
      package dbsample;

    import org.apache.axis2.context.ConfigurationContext;
    import org.apache.axis2.description.AxisService;
    import org.apache.axis2.engine.ServiceLifeCycle;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;

    public class DBSampleServiceLifeCycle implements ServiceLifeCycle {
        public static final String DB_CONNECTION = "dbconnection";

        public void startUp(ConfigurationContext configctx, AxisService service) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                // Creating the DB connection for the sample DB
                Connection conn = DriverManager.getConnection("jdbc:mysql://160.1.15.123:3306/dbsample",
                        "root",
                        "");
                //Storing the DB in the ConfigurationContext
                configctx.setProperty(DB_CONNECTION, conn);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void shutDown(ConfigurationContext configctx, AxisService service) {
            Connection conn = (Connection) configctx.getProperty(DB_CONNECTION);
            if (conn != null) {
                try {
                    // closing the DB
                    conn.close();
                } catch (SQLException e) {
                    System.out.println("Error while closing the DB connection");
                }
            }
        }
    }  

    Hay que compilar el código de las clases (si utiliza algún IDE haz Build del proyecto) de acuerdo a como yo lo he hecho
    no les marcara warnings mas ni errores (Si utilizan algún IDE le marcara warnings en los arreglos ArrayList, esto porque
    les sugiere que deben ir tipeados ej. ArrayList<TIPO> list = new ArrayList<TIPO>(); )

    Luego independientemente de donde hayan creado su proyecto (con IDE) o los archivos, carpetas (de manera general)
    agreguen una carpeta llamada META-INF (no se mucho de esto pero creo que deben respetar las mayúsculas en el nombre de esa carpeta)
    dentro de esa carpeta creen un archivo XML llamado services y dentro pongan.

            <service name="DBService" class="dbsample.DBSampleServiceLifeCycle">
        <description>Exposing a DB as a Web Service</description>
        <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                            class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
        </messageReceivers>
        <parameter name="ServiceClass">dbsample.PersonDBService</parameter>
    </service>
    No conozco mucho de esto pero les voy a describir lo que creo que es cada cosa
    service name = “DBService : es el nombre que aparecerá como el nombre de su servicio pueden poner cualquier nombre

    class=” dbsample.DBSampleServiceLifeCycle : dbsample es el nombre de su paquete (.)seguido del nombre de la clase
    DBSampleServiceLifeCycle (que honestamente no entiendo)

    La parte que sigue va siempre que quieran interactuar con un servicio ya sea para consumirlo o proporcionarlo

             <messageReceivers>
                    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                            class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
                    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
            </messageReceivers>

    Y por ultimo donde se encuentran los métodos que harán las operaciones en la base de datos

            <parameter name="ServiceClass">dbsample.PersonDBService</parameter>

    Ahora lo que hay que hacer es poner los .class de sus archivos y la carpeta META-INF dentro de un comprimido
    pueden ponerlo dentro de un zip y renombrarlo a cualquiernombre.aar aquí lo importante es que la extensión sea .aar
    yo lo hice de la siguiente manera:

    jar cfm servicioBD.aar dbsample/*.class META-INF	

    Y eso les creara un comprimido

    Una vez que tengamos nuestro archivo comprimido lo siguiente es copiarlo dentro de la carpeta /services de la ruta
    C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services

    A continuacion iremos a nuetro explorador e escribiremos la url http://localhost:8080/axis2/services/listServices

    Si todo va bien podran ver una imagen como la siguiente

    De lo contrario veran una imagen como la siguiente

    Eso indica que hay algun error y tendran que buscar, pero sera tarea de ustedes.
    Como sugerencia les puedo decir que se fijen en el nombre del paquete y clases, que el archivo XML este como en el ejemplo
    Me consta que hasta ahorita todo debe funcionar

    Si todo fue bien hagan click en DBService y le mostrara un XML de su servicio en http://localhost:8080/axis2/services/DBService?wsdl

    Con eso habrá bastado para que tengan un servio Web con una interacción con una base de datos
    Vamos a ver un poco de su funcionamiento

    Si van a la direccion http://localhost:8080/axis2/services/DBService/listAllPeople
    les mostra en un formato de XML las personas que tienen en su base de datos

    Para agegar una persona sera con la url
    http://localhost:8080/axis2/services/DBService/insertPerson?id=130&name=Peter&address=No5,Colombo,SriLanka&age=56

    (no se ¿por qué?, pero si ponen espacios hará nada)
    Si quieren ver si realmente hizo la inserción solo hagan un select a su tabla

Aqui comienza mi parte y mi error

    Luego mi idea es consumir el servicio web en un contexto de cliente servidor por lo que me tome la libertad de crear una ventana grafica
    como la que aparece a continuación

    y su repectivo codigo :

     package pckCliente;

    import dbsample.*;
    import java.rmi.RemoteException;

    /****************************************************************/
    /*                      Clientes                                    */
    /****************************************************************/
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class Clientes extends JFrame
    {
            PersonDBService obj;

            private JLabel jLabel1,nombre,edad,direccion;
            private JTextField jTextField1;
            private JTextField jTextField2;
            private JTextField jTextField3;
            private JTextField jTextField4;
            private JButton jButton1;
            private JPanel contentPane;

            public Clientes()
            {
                    super();
                    initializeComponent();

                    this.setVisible(true);
            }

            private void initializeComponent()
            {
                    obj= new PersonDBService();

                    jLabel1 = new JLabel("ID");
                    nombre = new JLabel("nombre");
                    direccion = new JLabel("direccion");
                    edad = new JLabel("edad");
                    jTextField1 = new JTextField();
                    jTextField2 = new JTextField();
                    jTextField3 = new JTextField();
                    jTextField4 = new JTextField();
                    jButton1 = new JButton("OK");
                    contentPane = (JPanel)this.getContentPane();

                    // jButton1

                    jButton1.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e)
                            {
                                    jButton1_actionPerformed(e);
                            }

                    });
                    //
                    // contentPane
                    //
                    contentPane.setLayout(null);
                    addComponent(contentPane, jLabel1, 7,27,60,22);
                    addComponent(contentPane, jTextField1, 85,27,100,22);

                    addComponent(contentPane, nombre, 7,55,60,22);
                    addComponent(contentPane, jTextField2, 84,55,100,22);

                    addComponent(contentPane, edad, 7,87,60,22);
                    addComponent(contentPane, jTextField3, 83,87,100,22);

                    addComponent(contentPane, direccion, 7,115,60,22);
                    addComponent(contentPane, jTextField4, 83,115,100,23);

                    addComponent(contentPane, jButton1, 71,147,83,28);
                    //
                    // Clientes
                    //
                    this.setTitle("Clientes ");
                    this.setLocation(new Point(0, 0));
                    this.setSize(new Dimension(273, 282));
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }

            /** Add Component Without a Layout Manager (Absolute Positioning) */
            private void addComponent(Container container,Component c,int x,int y,int width,int height){
                    c.setBounds(x,y,width,height);
                    container.add(c);
            }

            private void jButton1_actionPerformed(ActionEvent e){
                    obj.insertPerson(Integer.parseInt(jTextField1.getText()),jTextField2.getText(),jTextField4.getText(),Integer.parseInt(jTextField3.getText()));
            }

    //======================================================================//
            public static void main(String[] args)
            {
                    JFrame.setDefaultLookAndFeelDecorated(true);
                    JDialog.setDefaultLookAndFeelDecorated(true);
                    try
                    {
                            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                    }
                    catch (Exception ex)
                    {
                            System.out.println("Failed loading L&F: ");
                            System.out.println(ex);
                    }
                    new Clientes();
            }

    }

 
 	donde como ven la magia(...) sucede en dos lineas:
             .
             .
             .	
 	obj= new PersonDBService();
 			 .
 			 .
 			 .
 	obj.insertPerson(Integer.parseInt(jTextField1.getText()),jTextField2.getText(),
 									  jTextField4.getText(),Integer.parseInt(jTextField3.getText()));
 			 .
 			 .
 			 .
 			 
 
    Luego a partir de aquí viene lo interesante si este ejemplo lo fueron desarrollando con un IDE cuando corran Clientes() todo ira bien

    El problema que a mi se me presento es que quise hacer un jar (ejecutable) de la aplicación y lo logre de la siguiente forma

    Cree un manifiesto (un archivo del tipo texto - ->.txt)
    Dentro escribí:
    Main-Class: pckCliente.Clientes
    Class-Path: mysql-connector-java-5.1.13-bin.jar dbsample/

    Y en la linea de comandos

    jar cvfm BD.jar manifest.txt pckCliente.Clientes dbsample/*.class

    y listo tengo mi ejecutable BD.jar

    Aquí viene mi duda
    En consola ejecuto:
    java -jar BD.jar
    Y aparece mi ventana

    Pero cuando lleno los campos y hago clic en “OK” me manda la siguiente traza de errores:

    Que no encuentra el driver
    Y ¿no se por qué?

    Tambien lo he agregado de la siguiente forma:
    jar cvfm BD.jar manifest.txt pckCliente.Clientes dbsample/*.class mysql-connector-java-5.1.13-bin.jar

    Sin más por el momento agradezco si alguien me ayuda
    Espero les haya gustado sobre todo que lo hayan entendido
    Espero haber sido claro

    Y no es justificación pero esta es mi primera aportación en cualquier foro

    --NO NIEGUES LO QUE HAZ DE PEDIR DESPUES—
    --Las máquinas no tienen palabra--

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de benek

Blog

Checa en el blog de willyxoft, tiene una serie de posts de WS bastante interesante.

Saludos.

Javier Ramírez Jr.
http://twitter.com/_benek

Imagen de ezamudio

Componente

Primero desarrolla un componente que haga lo que necesitas que haga. Por ejemplo, un componente que tiene un método que recibe ciertos parámetros y devuelve un resultado (que puede ser un objeto, un mapa, un entero, etc). Puede ser cualquier objeto en Java. Si necesita conectarse a base de datos, le pones su DataSource, etc. Te aseguras que no maneje estado (que no tenga variables de instancia que guarden algun estado interno del objeto), para que pueda funcionar bien en un ambiente multi-hilos.

Ya que tienes todo eso y pasa tus pruebas unitarias bien, entonces simplemente debes publicar ese componente como un web service. Como ya dijo Benek, willyxsoft publicó varios artículos de web services en Java 6. Basta con que definas una interfaz (misma que implementa tu componente, con el método o métodos que quieres publicar como web service), pones un par de anotaciones en tu componente y tendrás lo necesario para generar el proxy para web service.

Imagen de ezamudio

Class-Path en JAR

Cuando usas Class-Path en el manifiesto de un jar, los jars que indiques se buscan relativos al mismo directorio del jar donde se especifican. Es decir si tienes tu jar en /tmp entonces el driver de mysql también debe estar en /tmp; no sirve de nada incluir el driver de mysql dentro del jar de tu aplicación.

Gracias, pero no se resolvio el problema

Hola muchas gracias por tu respuesta, pero te comento que ya lo hecho asi tengo el jar de mysql en mi carpeta como tu lo indicas y tambien sale el mismo error he hecho varias "combinaciones" por asi decirlo y nada intente poner el jar en la carpeta lib de tomcat y de axis y tampoco

De cualquier forma muchas gracias

Imagen de ezamudio

classpath...

Según entiendo, el driver de mysql solamente debe estar en el server de hecho, porque es quien se conecta a la base de datos. La idea es que en el cliente no necesitas el driver porque no se conecta a base de datos, solamente invoca el web service. Pero en el cliente necesitas las librerías de Axis2 en el classpath...

Por cierto no se ve el stacktrace que pusiste como imagen, así que no podemos saber qué dice.

ok

si entiendo tu logica y lo voy hacer de esa forma, aunque tambien ya lo hice, tambien te comento que las libreias de axis las inclui y como no se cuales son las necesarias y suficientes agregue todas y se me hizo un jar enorme como de 20Mb aprox la traza es la siguiente:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dbsample.PersonDBService.insertPerson(PersonDBService.java:108)
at pckCliente.Clientes.jButton1_actionPerformed(Clientes.java:172)
at pckCliente.Clientes.access$400(Clientes.java:13)
at pckCliente.Clientes$5.actionPerformed(Clientes.java:98)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Imagen de ezamudio

en cliente?

Pero esa excepción te sale en el cliente? Si te sale en el cliente, es síntoma de que algo estás haciendo mal, cargando algo que no deberías... el cliente de web service no necesita acceso a la base de datos (si lo tuvieras, para qué quieres el web service?)

Como te decía, no sirve de nada que metas más jars al jar de tu aplicación. Deben estar disponibles en el classpath, si es que pones las referencias a ellos en el atributo Class-Path del MANIFEST.MF

En cuanto a las librerías mínimas necesarias, yo he arrancado clientes de web services con estas dependencias de axis (1.5):

axiom-api-1.2.8.jar
axis2-adb-1.5.jar
axis2-transport-local-1.5.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
wsdl4j-1.6.2.jar
axiom-dom-1.2.8.jar
axis2-kernel-1.5.jar
commons-codec-1.3.jar
httpcore-4.0.jar
wstx-asl-3.2.4.jar
axiom-impl-1.2.8.jar
axis2-transport-http-1.5.jar
commons-httpclient-3.1.jar
neethi-2.0.4.jar
XmlSchema-1.4.3.jar