【问题标题】:Cannot resolve DatatypeConverter class in java无法在 java 中解析 DatatypeConverter 类
【发布时间】:2020-07-21 02:50:21
【问题描述】:

我有以下代码来生成 SHA-1 哈希。

@Override
    public String generateHash(String plainTextPassword) {

        String hashedPassword = "";
        try {
            MessageDigest msdDigest = MessageDigest.getInstance("SHA-1");
            msdDigest.update(plainTextPassword.getBytes("UTF-8"), 0, plainTextPassword.length());
            hashedPassword = DatatypeConverter.printHexBinary(msdDigest.digest());
        } catch (Exception e) {
            System.out.println("HASHING FAILED");
        }
        return hashedPassword;
    }

在我的本地机器上,使用 DatatypeConverter 类没有问题。包是 javax.xml.bind.DatatypeConverter; 当我将我的项目转移到运行 Ubuntu 的 linux 机器上时,DatatypeConverter 类没有被解析。

【问题讨论】:

  • 这对您有帮助吗? stackoverflow.com/questions/43574426/…也许你在不同的机器上使用不同版本的Java?
  • 无论如何我都会尽量远离那门课。 DataTypeConverter 类是 XML 框架的一部分。它不应该用作通用转换器。自己编程或使用 Apache Commons 或 Google Guava 相对容易。是的,没有提供此功能很烦人,我将立即尝试解决。
  • 正如@CodingTil 所指出的,JAXB 类已从 Java SE for Java 11+ 中删除。
  • 查看stackoverflow.com/questions/19450452/… 中的答案,了解将字节转换为十六进制字符串的替代方法。

标签: java performance encryption types


【解决方案1】:

从 Java 9 开始,模块 javax.xml.bind 已被置于 jdk 之外。

此外,作为向 Eclipse 基金会捐赠的 Java EE 的一部分,它的新名称是 Jakarta EE,因此命名空间被重命名为 Jakarta。所以你必须进行以下修改:

将依赖项添加到您的项目中:

使用 Maven,将以下内容添加到您的 pom.xml

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>3.0.0</version>
</dependency>

使用 Gradle,将以下内容添加到您的 build.gradle

implementation group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api-parent', version: '3.0.0', ext: 'pom'

并且,在使用依赖项的 java 代码中,将导入更改为:

import jakarta.xml.bind.DatatypeConverter;

【讨论】:

  • Kotlin gradle 导入声明:implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多