Hi!

Thank you for your answer, but I am afraid I have already done most of that. I am using Windows ;) and the ODBC is defined both as a System DSN, and as a User DSN. The User DSN is used when I execute the java-program containing the WS-method directly, and the System DSN when I execute the WS via a SOAP-klient. Also, I don’t understand what you mean with mapped drives. �The only reference to the database is through the JDBC connection url: “jdbc:odbc:carsdatabase”. I will try MySQL instead of Access as suggested and see if it helps.

 

Thank you! If you or anyone else comes up with new ideas, please don’t hesitate to mail me.

 

Best regards

Martin

 

 

-----Ursprungligt meddelande-----
Fr�n: Don Albertson [mailto:[EMAIL PROTECTED]
Skickat: den 27 maj 2005 14:15
Till: [email protected]
�mne: Re: Cannot query database from web service.

 

I can't say for sure that this is your problem and if my assumption that your service is running on Windows is wrong then it almost certainly isn't but....

I have had problems with ODBC connections when they are not System connections.  If the ODBC connection is defined at user level, the web service may not be able to find it.

Another oddity I have encountered has to do with mapped drives.  If the Access db is referenced as a mapped drive and the web service container is running as a service, it may not be able to reference the mapped drive.  In this case I have used the complete \\server_name\... method of referencing the drive with the db on it successfully.  As a test you might try replacing the Access db with MySql, MSDE or other db engine just to see if the service can connect there successfully.

On 5/27/05, Martin G�lich <[EMAIL PROTECTED]> wrote:

Hello!

I have a tricky problem that I cannot solve on my own. I want to use JDBC
from within my web service implementation to query an Access 2000 database
via ODBC (System DSN) and return the answer. That is, the java method
implementing the web service uses JDBC. For some reason this doesn't work.

The program containing the method runs just fine when executed directly from
the command prompt, but when it is invoked by calling the web service from
an Axis client I get a createSQLException with a trace back to
Method.invoke() among others (see below). I have tried many things and it
seems to me that my database cannot be queried from within the Axis-process
that is executing the web service. Why is that?

Have anybody else encountered a similar problem, and how did you solve it?
Please help!

PS. How can I open a text file from within a web service and use it? The
default path/user.dir property is c:\winnt\system32 from the perspective of
the running web service so the text file is never found. I have tried to set
the user.dir property to directory ..\axis\WEB-INF\classes without success.
DS.


Here is the code implementing my web service:

  public synchronized String getCarsByOwner(String ownerSSN) {

                      String sqlResult;

                      try {

                          String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

                          String dbURL = "jdbc:odbc:carsdatabase";

                          // Load driver and connect to database

                          Class.forName(driver).newInstance();

                          Connection connection =
DriverManager.getConnection(dbURL);


                          PreparedStatement stmnt =
connection.prepareStatement("SELECT * "+
                                "FROM Cars "+
                                "WHERE Owner=3D"+ownerSSN);

                          ResultSet res = stmnt.executeQuery();

                          sqlResult = convertQueryResultToString();

                      } catch(Exception e) {

                          StackTraceElement[] ste = e.getStackTrace();

                          StringBuffer buf = new StringBuffer();

                          for(int i=0; i<ste.length; i++) {

                        buf.append(ste[i].toString());
                                 buf.append(endl);
                          }

                          sqlResult = buf.toString();
                      }
                      return sqlResult;
    }

And here is the error received:

sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6987)

sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)

sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect (JdbcOdbc.java:3074)

sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)

sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)

java.sql.DriverManager.getConnection(DriverManager.java :512)

java.sql.DriverManager.getConnection(DriverManager.java:193)

datasources.cars.CarsDBClient$1.run(CarsDBClient.java:117)

datasources.cars.CarsDBClient.getCarsByOwner(CarsDBClient.java:138)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
:39
)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI
mpl.java:25)

java.lang.reflect.Method.invoke(Method.java:324)

org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397
)

org.apache.axis.providers.java.RPCProvider.processMessage (RPCProvider.jav
a:304)

org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:329)

org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:
71)

org.apache.axis.SimpleChain.doVisiting (SimpleChain.java:157)

org.apache.axis.SimpleChain.invoke(SimpleChain.java:122)

org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:517)

org.apache.axis.server.AxisServer.invoke(AxisServer.java :324)

org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:639)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java :
339)
........


Best regards

Martin





--
It used to be that machines automated work, giving us more  time to do other things. But now machines automate the  production of attention-consuming information, which takes  our time. For example, if one person sends the same e-mail  message to 10 people, then 10 people have to respond.
Esther Dyson

Reply via email to