Skip to content

When executing against a file encoded in Windows-31J (MS932), a java.nio.charset.UnmappableCharacterException occurs. #980

@890sugano

Description

@890sugano

What version of OpenRewrite are you using?

I am using

  • rewrite-core v8.51.0
  • rewrite-java v8.51.0
  • Maven/Gradle plugin v6.6.1
  • java21

How are you running OpenRewrite?

I am using the Maven plugin, and my project is a single module project.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>openrewrite</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>MS932</project.build.sourceEncoding>
        <project.reporting.outputEncoding>MS932</project.reporting.outputEncoding>
        <maven.compiler.parameters>true</maven.compiler.parameters>
    </properties>

    ... 
            <plugin>
                <groupId>org.openrewrite.maven</groupId>
                <artifactId>rewrite-maven-plugin</artifactId>
                <version>6.6.1</version>
                <configuration>
                    <activeRecipes>
                        <recipe>com.example.ChangeMethodAccessLevel</recipe>
                    </activeRecipes>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.example</groupId>
                        <artifactId>openrewrite</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
                </dependencies>
            </plugin>

What is the smallest, simplest way to reproduce the problem?

  • The file encoding is set to Windows-31J (MS932).
package org.example;

public class TestClass {
    public void test() {
        // TODO: メソッド実行
        return;
    }
}

What did you expect to see?

package org.example;

public class TestClass {
    private void test() {
        // TODO: メソッド実行
        return;
    }
}

What did you see instead?

package org.example;

public class TestClass {
    private void test() {
        // TODO: �
  • If you're unable to reproduce the issue, please try using this project.

What is the full stack trace of any errors you encountered?

[ERROR] Failed to execute goal org.openrewrite.maven:rewrite-maven-plugin:6.6.1:run (default-cli) on project openrewrite: Execution default-cli of goal org.openrewrite.maven:rewrite-maven-plugin:6.6.1:run failed: Unable to rewrite source files: Input length = 1 -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.openrewrite.maven:rewrite-maven-plugin:6.6.1:run (default-cli) on project openrewrite: Execution default-cli of goal org.openrewrite.maven:rewrite-maven-plugin:6.6.1:run failed: Unable to rewrite source files
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
...
Caused by: java.nio.charset.UnmappableCharacterException: Input length = 1
at java.nio.charset.CoderResult.throwException (CoderResult.java:280)
at sun.nio.cs.StreamEncoder.implWrite (StreamEncoder.java:384)
at sun.nio.cs.StreamEncoder.implWrite (StreamEncoder.java:357)
at sun.nio.cs.StreamEncoder.lockedWrite (StreamEncoder.java:158)
at sun.nio.cs.StreamEncoder.write (StreamEncoder.java:139)
at java.io.OutputStreamWriter.write (OutputStreamWriter.java:219)
at java.io.BufferedWriter.implFlushBuffer (BufferedWriter.java:178)
at java.io.BufferedWriter.flushBuffer (BufferedWriter.java:163)
at java.io.BufferedWriter.implClose (BufferedWriter.java:397)
at java.io.BufferedWriter.close (BufferedWriter.java:380)
at org.openrewrite.maven.AbstractRewriteRunMojo.writeAfter (AbstractRewriteRunMojo.java:215)
at org.openrewrite.maven.AbstractRewriteRunMojo.execute (AbstractRewriteRunMojo.java:165)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

Context

  • As a Japanese developer working on a legacy system migration, I am planning to use OpenRewrite.
  • I am unable to change the file encoding of the target files, which are encoded in Windows-31J (MS932).
  • The issue does not occur during JUnit test execution; the test completes successfully. However, it fails when using the Maven plugin.
mvn -X rewrite:run

Metadata

Metadata

Labels

Type

No fields configured for Bug.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions