I'm developing a custom authentication plugin for OAM(Oracle Access Manager) in Java language using JDeveloper IDE.
i'm parsing a URL and i get the variables i want from a JSONObject correctly on a Main.class file without triggering any kind of Exception
This leads me to the assumption that the whole parsing code is correct which means the readJsonFromUrl function does it job.
Let me mention what my PhillPlugin.class includes
public ExecutionStatus process(AuthenticationContext context), triggered when the Plug-In is to run.public void getDataGenerate(String Url), called inside process function to created theJSONObjectfromURLpublic static JSONObject readJsonFromUrl(String url)called inside getDataGenerate functionprivate static String readAll(Reader rd)used for parsing inside readJsonFromUrl
Now i upload the Plug-In to the server, i run it and get the following in it's Logs
java.lang.NoClassDefFoundError: org/json/JSONObject
at phillplugin.PhillPlugin.readJsonFromUrl(PhillPlugin.java:184)
at phillplugin.PhillPlugin.getDataGenerate(PhillPlugin.java:132)
at phillplugin.PhillPlugin.process(PhillPlugin.java:63)
What is needed in order to create the Plug-In:
PhillPlugin.classPhillPlugin.xmlMANIFEST.MF
I'm mentioning the above because i have to include somewhere in these files the org.json path. ( it already exists as an import in PhillPlugin.class and Main.class )
The org.json.jar is included in Project's Libraries as well as all the .jars in order to build the Plug-In
MANIFEST.MF
Manifest-Version: 1.0
Bundle-Version: 10
Bundle-Name: PhillPlugin
Bundle-Activator: phillplugin.PhillPlugin
Bundle-ManifestVersion: 2
Import-Package: org.osgi.framework;version="1.3.0",oracle.security.am.plugin,oracle.security.am.plugin.authn,oracle.security.am.plugin.impl,oracle.security.am.plugin.api,oracle.security.am.common.utilities.principal,oracle.security.idm,javax.security.auth
Bundle-SymbolicName: PhillPlugin
CLASSPATH: felix.jar, identitystore.jar, oam-plugin.jar, utilities.jar, org.json.jar
Sample of the PhillPlugin.Class
I'm not supposed to include the URL for security purposes. (Trust me it's Valid)
public void getDataGenerate(String Url) {
System.out.println("----- Reading Json Object -----");
JSONObject json;
try {
json = readJsonFromUrl(Url);
System.out.println("The Json Object: "+json.toString());
otp=Integer.parseInt((String) json.get("otp"));
System.out.println("The User is:"+user+"\n"+"His OTP is: "+otp);
} catch (Exception e) {
System.out.println("Exception : "+e.toString());
}
public static JSONObject readJsonFromUrl(String url) throws IOException,JSONException {
System.out.println("Opening Stream");
InputStream is = new URL(url).openStream();
System.out.println("Stream opened");
try {
System.out.println("----------\n\n\nUrl to Parse: "+url+"\n\n\n");
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
System.out.println("\n\n\n"+"BufferedReader opened\n\n\n\n");
String jsonText =(String) readAll(rd);
System.out.println("\n\n\nJsonTEXT:"+jsonText+"\n\n\n");
JSONObject json=null;
System.out.println("\n\n Created Json Instance\n\n\n");
try{
System.out.println("inside try statement - initializing JSONObject with the text above \n\n\n");
//-------ERROR TRIGGERED HERE---------
json = new JSONObject(jsonText);
System.out.println("--------------------Object created-------------------");
}catch (Exception e) {
System.out.println("\n\n\n\n\nJSONOBJECT failed to be created: \n"+e);
}
System.out.println("\n\n\nJSON OBJECT"+json+"\n\n\n\n");
return json;
} finally {
is.close();
}
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
PhillPlugin.xml
<Plugin type="Authentication">
<author>uid=Phill</author>
<email>phill@oracle.com</email>
<creationDate>12:47:00, 2019-07-11</creationDate>
<description>Phill-Plugin Prints Hello</description>
<configuration>
</configuration>
</Plugin>
This is the output on server Logs before crashing:
Stream opened
----------
Url to Parse: https://something
BufferedReader opened
JsonTEXT: it's correct
Created Json Instance
inside try statement - initializing JSONObject with the text above
I'm worrying too much about the
MANIFEST.MFfile because probably i'm doing something wrong in there
Sorry for the long post, i will provide any extra information if needed, Thank you
