新的 JSONObject 触发 java.lang.NoClassDefFoundError

我正在使用JDeveloper IDE以 Java 语言为OAM(Oracle Access Manager)开发自定义身份验证插件。


我正在解析 a并从文件中正确地URL获取我想要的变量,而不会触发任何类型的JSONObject Main.class Exception

这使我假设整个解析代码是 正确的,这意味着该readJsonFromUrl 函数可以正常工作。


让我提一下我的PhillPlugin.class内容

  1. public ExecutionStatus process(AuthenticationContext context),当插件运行时触发。

  2. public void getDataGenerate(String Url), 调用内部流程函数来创建JSONObjectfromURL

  3. public static JSONObject readJsonFromUrl(String url)在getDataGenerate函数中调用

  4. private static String readAll(Reader rd)用于解析内部readJsonFromUrl


现在我将插件上传到服务器,我运行它并在它的日志中获得以下内容

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)

创建插件需要什么:

  • PhillPlugin.class

  • PhillPlugin.xml

  • MANIFEST.MF


我提到上面的内容是因为我必须在这些文件的某处包含路径org.json。(它已经作为导入存在 PhillPlugin.class并且Main.class

org.json.jar包含在项目的库中以及所有 .jars构建插件


清单文件

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

PhillPlugin.Class 示例


出于安全目的,我不应该包含该 URL。(相信我这是有效的)

我太担心这个MANIFEST.MF文件了,因为我可能在那里做错了什么

抱歉发了这么长的帖子,如果需要我会提供任何额外的信息,谢谢


慕桂英546537
浏览 326回答 2
2回答

阿波罗的战车

在编写Authenticaiton Pluginfor Server 时,所有额外的库以及外部文件OAM都应该被提及。MANIFEST.MF.jar此外,所有.jar文件都应部署在最终插件.jar以及外部插件中。libraries就我而言,我必须org.json.jar在导出时PhillPlugin.jar包括如下内容:PhillPlugin.jar如您所见org.json.jar,它的库org是必需的清单.MF最后一步是在您的插件中使用的MANIFEST.MF所有额外内容中提及classes就我而言,我必须将其包含在我的Import-Package属性中才能创建JSONObject实例org.json;resolution:=optional, org.json.JSONObject;resolution:=optional如果您想使用 a ,JSONArray则必须添加以下内容:org.json.JSONArray;resolution:=optional等等。编辑:应按如下方式提及类路径:Bundle-ClassPath: org.json.jar, felix.jar, identity-provider.jar, oam-plugin.jar, utilities.jar

守着星空守着你

CLASSPATH中的条目显然MANIFEST.MF是错误的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java