我按照通常的教程创建了一个自定义 UserStore。
我尝试覆盖 org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager。
我的 CustomUserStoreManager 是扩展 AbstractUserStoreManager 的 JDBCUserStoreManager 的副本。
我以这种方式创建了一个 CustomUserStoreMgtDSComponent
@Component(name = "custom.user.store.mgt.dscomponent", immediate = true)
public class CustomUserStoreMgtDSComponent {
private static Log log = LogFactory
.getLog(CustomUserStoreMgtDSComponent .class);
private static RealmService realmService;
// @Activate
protected void activate(ComponentContext ctxt) {
log.info("CustomUserStoreMgtDSComponent bundle start activate...");
CustomUserStoreManager customUserStoreManager = new CustomUserStoreManager();
ctxt.getBundleContext().registerService(
UserStoreManager.class.getName(), customUserStoreManager, null);
log.info("CustomUserStoreMgtDSComponent bundle activated successfully.");
}
@Deactivate
protected void deactivate(ComponentContext ctxt) {
if (log.isDebugEnabled()) {
log.debug("Custom User Store Manager is deactivated ");
}
}
@Reference(name = "user.realmservice.default",
cardinality = ReferenceCardinality.MANDATORY,
policy = ReferencePolicy.DYNAMIC, unbind = "unsetRealmService")
protected void setRealmService(RealmService rlmService) {
realmService = rlmService;
}
protected void unsetRealmService(RealmService realmService) {
realmService = null;
}
}
这是插件调用:
<carbon.version>4.6.0</carbon.version>
<carbon.user.imp.pkg.version>[4.0.0,5.0.0)</carbon.user.imp.pkg.version>
<osgi.framework.imp.pkg.version.range>[1.7.0, 2.0.0)</osgi.framework.imp.pkg.version.range>
<osgi.service.component.imp.pkg.version.range>[1.2.0, 2.0.0)</osgi.service.component.imp.pkg.version.range>
[...]
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<!-- <version>5.1.2</version> -->
<version>3.4.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Private-Package>org.custom.wso2.userstore.internal</Private-Package>
<Export-Package>
!org.custom.wso2.userstore.internal,
org.custom.wso2.userstore.*;version="${project.version}"
</Export-Package>
<Import-Package>
org.wso2.carbon.user.api.*;version="${carbon.user.imp.pkg.version}",
org.wso2.carbon.user.core.*;version="${carbon.user.imp.pkg.version}",
org.osgi.framework.*;version="${osgi.framework.imp.pkg.version.range}",
org.osgi.service.component.*;version="${osgi.service.component.imp.pkg.version.range}"
</Import-Package>
<DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
当我使用 maven-bundle-plugin:5.2.0 时,我可以构建一个 jar 放入存储库/组件/dropins 中的 dockerized wso2 apim 中(maven-bundle-plugin:3.xx 不起作用并且有内部异常)
当我重新启动 APIM 时,我可以看到 wso2 更改了我的 jar 以修改 MANIFEST 文件。日志说:
!ENTRY org.custom.wso2.userstore 4 0 2021-05-03 13:05:02.202 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException:无法解析模块:org.custom.wso2.userstore [238 ] 未解决的需求:Import-Package: org.osgi.service.component; 版本="[1.3.0,2.0.0)"; resolution:="optional" 未解决的需求:Require-Capability: osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))"
无论我在插件调用中设置什么,MANIFEST 文件都被修改为引用:
Import-Package: org.osgi.service.component; version="[1.3.0,2.0.0)"; resolution:="optional"
Unresolved requirement: Require-Capability: osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))"
部署失败。
问题出在哪里 ?