2013-05-28 21 views
0

我們使用ant來執行sql任務 - 它一直工作正常,直到我們在Oracle連接字符串中使用LDAPS。使用如下所述的Oracle LDAPS連接字符串,它會拋出異常 - 我們可以通過'Oracle SQL Developer'連接,使用相同的連接字符串。我們將basePath更改爲包含sqldeveloper \ jdbc \ lib路徑,但仍獲得相同的classnotfoundexception。請指教。sql ant任務給LDAPS oracle連接字符串錯誤

感謝 庫馬爾

環境指標

1. Oracle: 10.2.0.4 
2. Java JDK: 1.6 (Oracle GlassFish) 
3. ojdbc6.jar (Oracle Database 11g Release 2 (11.2.0.3) JDBC Drivers) 
4. ojdbc14.jar (Oracle Database 10g Release 2 (10.2.0.4) JDBC Drivers) 
5. OS: Windows 7 64 bit 

LDAPS連接字符串

jdbc:oracle:thin:@ldaps://${lDAP-server}:${ldap-port}/${Schema},cn=OracleContext,dc=xxx,dc=com" 

SQL Ant任務

< sql driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@ldaps://${lDAP-server}:${ldap-port}/${Schema},cn=OracleContext,dc=xxxx,dc=com" userid="${this.service.db.user}" password="${this.service.db.password}" classpathref="base.classpath"> 
SELECT * FROM SOMETHING; 
</sql> 

全部異常跟蹤:

BUILD FAILED 
The following error occurred while executing 
this line: 
java.sql.SQLRecoverableException: IO Error: 
JNDI Package failure **javax.naming.CommunicationException**: servername:port (changed) [Root exception is **java.lang.ClassNotFoundException: oracle.net.jndi.CustomSSLSocketFactory**] 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458) 
     at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546) 
     at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236) 
     at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
     at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521) 
     at org.apache.tools.ant.taskdefs.JDBCTask.getConnection(JDBCTask.java:370) 
     at org.apache.tools.ant.taskdefs.SQLExec.getConnection(SQLExec.java:942) 
     at org.apache.tools.ant.taskdefs.SQLExec.execute(SQLExec.java:614) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
     at net.sf.antcontrib.logic.IfTask.execute(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
     at net.sf.antcontrib.logic.IfTask.execute(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.Target.execute(Target.java:392) 
     at org.apache.tools.ant.Target.performTasks(Target.java:413) 
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
     at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) 
     at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
     at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442) 
     at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.Target.execute(Target.java:392) 
     at org.apache.tools.ant.Target.performTasks(Target.java:413) 
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
     at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
     at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
     at org.apache.tools.ant.Main.runBuild(Main.java:811) 
     at org.apache.tools.ant.Main.startAnt(Main.java:217) 
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: oracle.net.ns.NetException: JNDI Package failure javax.naming.CommunicationException: server:port (changed) [Root exception is java.lang.ClassNotFoundException: oracle.net.jndi.CustomSSLSocketFactory] 
     at oracle.net.jndi.JndiAttrs.<init>(JndiAttrs.java:161) 
     at oracle.net.resolver.AddrResolution.<init>(AddrResolution.java:193) 
     at oracle.net.ns.NSProtocol.connect(NSProtocol.java:219) 
     at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102) 
     at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320) 
     ... 64 more 
+0

我想知道LDAP服務器是否使用自簽名SSL證書?這個問題傾向於很難解釋java錯誤:-( –

+0

嗨,馬克 - 感謝您看看它 - 我們能夠使用一個簡單的Java程序(Connection connection = establishConnection(connString,userId,password);成功連接任何SSL設置 - 即使oracle管理員提到我們不需要安全證書我們猜測ant sql任務有一些無效的jar引用作爲解決方法,我們創建了自己的java sql實現並調用它來代替ant sql任務 – user2427012

回答

0

使用 「MOTEN」 有了這個錯誤sqlplus中通過運行SQL。使用ojdbc5.jar(來自Oracle)解決。將其包含在你的類路徑中。檢查您的JVM是否是相同的版本(JDK 1.5)。