繁体   English   中英

为 keycloak 实现 SPI 时出现“ModuleLoadException:加载模块时出错”

[英]"ModuleLoadException: Error loading module" when implementing SPI for keycloak

这是一个重现错误的仓库:https://github.com/hansen-simon/keycloak-mailattachment

我尝试在 keycloak 中实现一个 EmailSenderProvider。 我遵循了这个文档: https://wjw465150.gitbooks.io/keycloak-documentation/content/server_development/topics/providers.html

在我构建 jar 文件后,我将其复制到 Dockerfile 到模块旁边的/opt/jboss/keycloak/modules/org/keycloak/email/provider/main/ module.xml中。 docker 映像构建成功,但是当我运行它时,出现以下错误:

12:39:35,357 FATAL [org.keycloak.services] (ServerService Thread Pool -- 62) Error during startup: java.lang.RuntimeException: org.jboss.modules.ModuleLoadException: Error loading module from /opt/jboss/keycloak/modules/org/keycloak/email/provider/main/module.xml
        at org.keycloak.keycloak-wildfly-extensions@15.0.2//org.keycloak.provider.wildfly.ModuleProviderLoaderFactory.create(ModuleProviderLoaderFactory.java:45)

...

        at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: org.jboss.modules.ModuleLoadException: Error loading module from /opt/jboss/keycloak/modules/org/keycloak/email/provider/main/module.xml
        at org.jboss.modules.xml.ModuleXmlParser.parseModuleXml(ModuleXmlParser.java:337)

...

        ... 42 more
Caused by: org.jboss.modules.xml.XmlPullParserException: Invalid/mismatched module name (expected org.keycloak.email) (position: START_TAG seen ...?>\n<module xmlns="urn:jboss:module:1.1" name="org.keycloak.email">... @2:64) 
        at org.jboss.modules.xml.ModuleXmlParser.invalidModuleName(ModuleXmlParser.java:374)
...

module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="org.keycloak.email">
    <resources>
        <resource-root path="email-0.0.1-SNAPSHOT.jar" />
    </resources>
    <dependencies>
        <module name="javax.activation.api" />
        <module name="javax.mail.api" />
        <module name="org.jboss.logging" />
        <module name="org.keycloak.keycloak-common" />
        <module name="org.keycloak.keycloak-core" />
        <module name="org.keycloak.keycloak-server-spi" />
        <module name="org.keycloak.keycloak-server-spi-private" />
        <module name="org.keycloak.keycloak-services" />
    </dependencies>
</module>

Dockerfile:

FROM quay.io/keycloak/keycloak:15.0.2

COPY mailattachment/target/*.jar /opt/jboss/keycloak/modules/org/keycloak/email/provider/main/
COPY mailattachment/module.xml /opt/jboss/keycloak/modules/org/keycloak/email/provider/main/

COPY mailattachment/startup-scripts/* /opt/jboss/startup-scripts/

EXPOSE 8080
ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ]

CMD ["-b", "0.0.0.0"]

启动脚本目录中的脚本:

embed-server --server-config=standalone-ha.xml --std-out=echo

batch

/subsystem=keycloak-server/:list-add(name=providers,value="module:org.keycloak.email.provider")

/subsystem=keycloak-server/spi=emailSender:add
/subsystem=keycloak-server/spi=emailSender/provider=default:add(enabled=true)
/subsystem=keycloak-server/spi=emailSender:write-attribute(name=default-provider, value=email)

run-batch

stop-embedded-server

我对错误日志行Invalid/mismatched module name (expected org.keycloak.email)... name="org.keycloak.email">感到惊讶。 它看起来像是给出了正确的模块名称。 这个设置有什么问题?

我能够通过不将 .jar 文件挂载到/opt/jboss/keycloak/modules而是挂载到/opt/jboss/keycloak/standalone/deployments并删除module.xml文件来解决问题。 我用一个工作示例更新了repo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM