我有一个自定义处理程序,它将使用OAuth2验证令牌,并在REST API配置中包含自定义处理程序。将自定义handler.jar复制到不包含的/ repository / components / libs目录(org.wso2.carbon.identity.oauth.stub-4.2.2.jar)。当我使用OAuth访问令牌调用API时,会发现未找到类异常。
java.lang.NoClassDefFoundError: org/wso2/carbon/identity/oauth2/stub/dto/OAuth2TokenValidationRequestDTO_OAuth2AccessToken
at org.wso2.handler.SimpleOauthHandler.handleRequest(SimpleOauthHandler.java:61)
at org.apache.synapse.rest.API.process(API.java:285)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:63)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:336)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationRequestDTO_OAuth2AccessToken
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:455)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
which is best way to include this dependent jar - org.wso2.carbon.identity.oauth.stub-4.2.2.jar?
答案 0 :(得分:0)
这可能有两个原因......
AS org.wso2.carbon.identity.oauth.stub-4.2.2.jar
是一个OSGI包,因此您需要将此包放入/repository/components/dropins
。通常jar文件放在lib
目录中,而不是OSGI包
您的服务器org.wso2.carbon.identity.oauth.stub
中可能有一些其他jar文件暴露相同的类..如果请尝试删除它们。例如,您可以使用{{1}删除OAuth介体功能管理UI(OAuth中介功能已经包含Feature Manager
jar文件。)
答案 1 :(得分:0)
如果您使用IS 4.6.0和ESB 4.8.0进行oAuth授权,则必须面对此问题,因为ESB 4.8.0使用org.wso2.carbon.identity.oauth.stub-4.2.1.jar
如果要实现hanlder与IS 4.6.0一起使用,可以将处理程序创建为包含org.wso2.carbon.identity.oauth.stub-4.2.2.jar
作为私有包的OSGi包。但这似乎不是一个好习惯。
(样本可以在https://github.com/wenodpathirana/wso2-api-security-handlers.git)
此外,如果将ESB 4.8.1与IS 4.6.0一起使用,则可以使用没有上述异常的处理程序,因为ESB 4.8.1使用org.wso2.carbon.identity.oauth.stub-4.2.2.jar