You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Karate Feature文件中调用自定义Java类报错,如何解决?

问题描述

我的src/test/java目录下有一个带静态方法的Java类,代码如下:

package com.latch.configPackage;

public class base64Tohex {
    public static void converter(String[] args) {
        String guid = "YxRfXk827kPgkmMUX15PNg==";
        String hexString = Hex.encodeHexString(guid.getBytes());
        System.out.println(hexString);
        return hexString;
    }
}

我在Karate Feature文件中尝试调用该类,代码如下:

* def doWork =
    """
    function(val) {
        var configPackage = Java.type('com.mycompany.configPackage.base64Tohex');
        var gc = new configPackage();
        return gc.converter();
    }
    """

其中com.mycompany是pom.xml中的groupId,但运行时出现错误:

>>>>>>
org.graalvm.polyglot.PolyglotException: TypeError: Access to host class com.mycompany.genevaconfig.base64Tohex is not allowed or does not exist.
- <js>.:anonymous(Unnamed:2)
解决方案
  • 统一包名匹配
    Java类的实际包是com.latch.configPackage,但Karate代码里引用的是com.mycompany.configPackage,错误日志中还出现了不相关的com.mycompany.genevaconfig,三者完全不匹配。必须保证Karate中Java.type()的类全限定名和Java类的实际包名一致:

    • 要么修改Java类的包声明为com.mycompany.configPackage(与pom的groupId对应);
    • 要么修改Karate代码中的类路径为com.latch.configPackage.base64Tohex。
  • 正确调用静态方法
    目标方法converter是静态方法,不需要创建类实例,直接通过类名调用即可。另外原方法定义了String[] args参数,调用时需传入对应参数,或修改方法为无参:
    修正后的Karate代码:

    * def doWork =
        """
        function(val) {
            var Base64ToHex = Java.type('com.mycompany.configPackage.base64Tohex');
            // 静态方法直接通过类调用,若不需要参数可修改Java方法为无参
            return Base64ToHex.converter([]);
        }
        """
    
  • 修复Java类的语法错误
    原Java类存在两处编译错误:

    1. 方法声明为void却返回String类型值,需将返回类型改为String;
    2. 使用了Hex类但未导入,需添加import org.apache.commons.codec.binary.Hex;(同时确保pom.xml中引入commons-codec依赖)。
      修正后的Java代码:
    package com.mycompany.configPackage;
    
    import org.apache.commons.codec.binary.Hex;
    
    public class base64Tohex {
        public static String converter(String[] args) {
            String guid = "YxRfXk827kPgkmMUX15PNg==";
            String hexString = Hex.encodeHexString(guid.getBytes());
            System.out.println(hexString);
            return hexString;
        }
    }
    
  • 确保类路径可访问
    确认Java类位于src/test/java/com/mycompany/configPackage目录下,Maven编译后会将类文件输出到target/test-classes,Karate运行时会自动加载该目录下的类,无需额外配置。

内容的提问来源于stack exchange,提问作者mnc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:15:38