BookmarkSubscribeRSS Feed
MDaniel
Obsidian | Level 7

Hello,

 

I am trying to use SasPy, I have configured it correctly (as far as i can tell) by modifying sascfg.py, but when I run the following code I get a Java error. 

Here are the machine specs:

- OS: Windows Server 2012R2

- Java version : "1.6.0_45"

- SAS: 9.4_M2

- Python 3.6, Anaconda distribution

 

Is this java related - i.e. does SasPy have some minimum Java requirements ? Or is there some other issue that I'm missing?

 

import saspy
sas = saspy.SASsession(cfgname='winlocal')

Java Error:
java.lang.NoClassDefFoundError: com/sas/services/connection/ConnectionFactoryException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: com.sas.services.connection.ConnectionFactoryException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
6 more
Exception in thread "main"

 

3 REPLIES 3
shayne
SAS Employee

The type of error returned for an unsupported Java version would be something like this:

>>> sas = saspy.SASsession(cfg='winlocal')
Using SAS Config named: winlocal
Java Error:
java.lang.UnsupportedClassVersionError: pyiom/saspy2j : Unsupported major.minor version 51.0

 

The type of error you're getting:

Java Error:
java.lang.NoClassDefFoundError: com/sas/services/connection/ConnectionFactoryException

indicates an issue with the class paths to the jars rather than the version of Java.

 

Verify that the class paths in the sascfg.py file are correct. The default paths to the jars under the SASDeploymentManager install directory included in the file almost certainly need to be updated for the maintenance release of SAS running at your site. For example, I had to update mine to reference the correct deploywiz__<version>__ for my SAS release as follows:

# build out a local classpath variable to use below for Windows clients
cpW  =  "C:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94502__prt__xx__sp0__1\\deploywiz\\sas.svc.connection.jar"
cpW += ";C:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94502__prt__xx__sp0__1\\deploywiz\\log4j.jar"
cpW += ";C:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94502__prt__xx__sp0__1\\deploywiz\\sas.security.sspi.jar"
cpW += ";C:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94502__prt__xx__sp0__1\\deploywiz\\sas.core.jar" 
MDaniel
Obsidian | Level 7

I think sascfg.py is configured correctly, this is then entire contents of the file:

SAS_config_names=['winlocal']

SAS_config_options = {'lock_down': False,
'verbose' : True
}

SAS_output_options = {'output' : 'html5'}

cpW = "D:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94472__prt__xx__sp0__1\\deploywiz\\sas.svc.connection.jar"
cpW += ";D:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94472__prt__xx__sp0__1\\deploywiz\\log4j.jar"
cpW += ";D:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94472__prt__xx__sp0__1\\deploywiz\\sas.security.sspi.jar"
cpW += ";D:\\Program Files\\SASHome\\SASDeploymentManager\\9.4\\products\\deploywiz__94472__prt__xx__sp0__1\\deploywiz\\sas.core.jar"
cpW += ";D:\\Anaconda3\\envs\\prod1\\Lib\\site-packages\\saspy\\java\\saspyiom.jar"

winlocal = {'java' : 'D:\\Program Files\\SASHOME\\SASPrivateJavaRuntimeEnvironment\\9.4\\jre\\bin\\java',
'encoding' : 'windows-1252',
'classpath' : cpW
}

 

All files in the cpW dictionary exist at that path. The path in winlocal points to the folder where java.exe and java.dll are located (they are actually in the "bin" folder, but it seems adding "java" at the end is necessary). I tried adding ".exe." and I received the same error. 

sastpw
SAS Employee

Hi there. I have only just started looking at these posts on Communities. I've only gotten Issues through my saspy Github site till now.

As it turns out, Java 6 (1.6) is too old to work with saspy. I've hit this issue a few times with other customers and getting a more current version of Java (Java 8  is the 'Current' one if you go to java.com to download) has resolved the problem each time.

And, yes, your config appears perfectly reasonable. I think it is just the old Java.

Tom

 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 3460 views
  • 0 likes
  • 3 in conversation