docker 中的 Spring 应用程序不支持 UTF-7

问题描述 投票:0回答:1

我有以下问题:

  • 我有一个微服务在 kubernetes pod 中作为 docker 镜像运行
  • 该服务可以创建“联系人”并从源加载 Base64 编码的邮件
  • 我们对它们进行解码并希望使用 simple-java-mail 库创建电子邮件
  • 但有些邮件采用 UTF-7 格式,这是未知的,我得到:
java.io.UnsupportedEncodingException: utf-7
    at java.lang.String.lookupCharset(String.java:819) ~[?:?]
    at java.lang.String.<init>(String.java:487) ~[?:?]
    at jakarta.mail.internet.MimeUtility.decodeWord(MimeUtility.java:901) ~[jakarta.mail-2.0.1.jar:2.0.1]
    at jakarta.mail.internet.MimeUtility.decodeText(MimeUtility.java:603) ~[jakarta.mail-2.0.1.jar:2.0.1]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.decodeText(MimeMessageParser.java:543) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.DecodedHeader.of(DecodedHeader.java:30) ~[simple-java-mail-8.0.0.jar:?]
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[?:?]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[?:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.retrieveAllHeaders(MimeMessageParser.java:365) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimePartTree(MimeMessageParser.java:159) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.internal.mimemessage.MimeMessageParser.parseMimeMessage(MimeMessageParser.java:153) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:138) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.mimeMessageToEmailBuilder(EmailConverter.java:125) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmailBuilder(EmailConverter.java:398) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:327) ~[simple-java-mail-8.0.0.jar:?]
    at org.simplejavamail.converter.EmailConverter.emlToEmail(EmailConverter.java:319) ~[simple-java-mail-8.0.0.jar:?]

我尝试使用https://github.com/k9mail/jutf7并将其添加到pom文件中。在本地有效,但在 kubernetes 上无效。再次发生 UnsupportedEncodingException。

我想也许 kubernetes 或 docker(抱歉,我对 DevOps 的东西没有那么深入)无法将 UTF-7 库添加到类路径中。 所以我尝试将文件直接复制到我的项目中。我添加了一个带有服务文件的 META-INF 文件夹,并将我的 CharsetProvider 放入其中。

java.nio.charset.spi.CharsetProvider

de.afi.api.utility.encoding.utf7.CharsetProvider 

再次在本地运行,但在 kubernetes 上不行。

我阅读了有关 UTF-7 和 CharsetProvider 的任何 stackoverflow 问题,但是否没有解决方案或解决方案对我来说是不可能的,例如我自己使用 CharsetProvider().charsetForName("...") ,这不是当简单的 java 邮件需要 UTF-7 时这是不可能的

我有一种感觉,从 META-inf/services 加载字符集对于

的组合不再起作用
  • Java17
  • SpringBoot 3
  • 简单java邮件8.0.0
  • 在 docker 容器中运行 有人有想法吗?
java spring-boot docker utf-7
1个回答
0
投票

为了解决这个问题,我们使用 -Xbootclasspath

https://docs.oracle.com/cd/E15289_01/JRCLR/optionx.htm#i1018570

© www.soinside.com 2019 - 2024. All rights reserved.