karatelabs/karate · info

karate.toJava() is deprecated and a no-op in V2 -…

Error message

karate.toJava() is deprecated and a no-op in V2 - JavaScript arrays work directly with Java

What it means

karate.toJava() existed in Karate V1 to convert JS arrays/objects into Java collections before handing them to Java interop calls. In V2 the JS engine bridges arrays natively, so toJava() is kept only for V1 compatibility: it logs this deprecation warning and returns its first argument unchanged (a no-op). Nothing fails; the warning flags code that should be migrated.

Solutions

  1. Delete the karate.toJava(...) call and pass the JS array/object directly to the Java method — V2 handles conversion automatically.
  2. If a specific Java API still needs a concrete Java type, build it explicitly in JS (e.g. java.util.List via Java interop) instead of relying on toJava.
  3. Suppress/skip only after confirming the call is a true no-op: the warning is informational and the input is returned unchanged.
  4. Search the suite for 'karate.toJava' and batch-remove all occurrences as part of the V1->V2 migration.

Example fix

// before (V1 style)
var list = karate.toJava([1, 2, 3]);
someJavaUtil.process(list);

// after (V2)
someJavaUtil.process([1, 2, 3]); // JS array used directly
Defensive patterns

Strategy: fallback

Validate before calling

// JS: strip legacy wrapper before passing to Java
var arg = karate.toJava ? karate.toJava(arr) : arr; // or simply: var arg = arr;

Prevention

When it happens

Trigger: Calling karate.toJava(someArrayOrObject) from JS, typically in features/scripts ported from Karate V1, or anywhere JavaInvokable toJava() is invoked in KarateJsUtils-registered karate API surface.

Common situations: Migrating a V1 test suite to V2 and keeping old interop boilerplate like `var list = karate.toJava(keys)`; tutorials/examples written for V1; code reviewers flagging the warnings appearing in logs after upgrade.

Understand the failure class

Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.

Related errors


AI-assisted analysis of karatelabs/karate@a22eb90246 (2026-09-12). Data as JSON: /api/errors/403446bd02804fe3. Report an issue: GitHub.

Appendix: source

Thrown at karate-core/src/main/java/io/karatelabs/core/KarateJsUtils.java:1004

    /**
     * karate.fail(message) - Explicitly fail the scenario with a message.
     */
    static JavaInvokable fail() {
        return args -> {
            String message = args.length > 0 && args[0] != null ? args[0].toString() : "karate.fail() called";
            throw new RuntimeException(message);
        };
    }

    // ========== Type Conversion Utilities (Invokable) ==========

    /**
     * karate.toJava() - Deprecated no-op for V1 compatibility.
     * In V2, JavaScript arrays work directly with Java, so this is unnecessary.
     */
    static JavaInvokable toJava() {
        return args -> {
            logger.warn("karate.toJava() is deprecated and a no-op in V2 - JavaScript arrays work directly with Java");
            if (args.length < 1) {
                return null;
            }
            return args[0]; // no-op, just return the input
        };
    }

    // ========== Debugging Utilities ==========

    /**
     * karate.stop(port) - Debugging breakpoint that pauses test execution.
     * Opens a server socket and waits for a connection (e.g., curl or browser).
     * Prints instructions to console. NEVER forget to remove after debugging!
     */
    static JavaInvokable stop() {
        return args -> {
            int port = 0; // 0 means pick any available port
            if (args.length > 0 && args[0] != null) {

View on GitHub (pinned to a22eb90246)