简体   繁体   English

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

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

Here is a repo to reproduce the error: https://github.com/hansen-simon/keycloak-mailattachment这是一个重现错误的仓库:https://github.com/hansen-simon/keycloak-mailattachment

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

After I built the jar file, I copy it in the Dockerfile into /opt/jboss/keycloak/modules/org/keycloak/email/provider/main/ directory next to the module.xml .在我构建 jar 文件后,我将其复制到 Dockerfile 到模块旁边的/opt/jboss/keycloak/modules/org/keycloak/email/provider/main/ module.xml中。 The docker image builds successfully, but when I run it I get the following error: 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)
...

The module.xml : 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>

The Dockerfile: 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"]

the script inside startup-scripts dir:启动脚本目录中的脚本:

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

I'm suprised by the error log line Invalid/mismatched module name (expected org.keycloak.email)... name="org.keycloak.email"> .我对错误日志行Invalid/mismatched module name (expected org.keycloak.email)... name="org.keycloak.email">感到惊讶。 It looks to like the correct module name is given.它看起来像是给出了正确的模块名称。 What is wrong with this setup?这个设置有什么问题?

I was able to solve the problem by not mounting the.jar file to /opt/jboss/keycloak/modules but to /opt/jboss/keycloak/standalone/deployments and remove the module.xml file.我能够通过不将 .jar 文件挂载到/opt/jboss/keycloak/modules而是挂载到/opt/jboss/keycloak/standalone/deployments并删除module.xml文件来解决问题。 I updated the repo with a working example.我用一个工作示例更新了repo

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

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