1. 개요

 서버 구동시 Java에서 기본 Exception 중 NumberFormatException이 발생한다. 

     Integer.parseInt(String number);

 Java에서 Integer.parseInt의 경우 "2,147,483,647" 을 초과할 수 없으며, "앞단에  0"이 붙는 경우 바로 오류가 발생한다.

서버 구동시 Java - NumberFormatException 발생

 해당 오류 추적 *최초 발생원인 분석

필자는 Coreprtect Library를 이용 중인데 WorldEdit 플러그인과 Adopter 지점에서 오류 발생

  원인 소스

public static void loadWorldEdit() {
        try {
            boolean validVersion = true;
            String version = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getVersion();
            if (!version.contains(";") && !version.contains("+")) {
                if (version.contains(".")) {
                    String[] worldEditVersion = version.split("-|\\.");
                    if (worldEditVersion.length >= 2) {
                        worldEditVersion[0] = worldEditVersion[0].replaceAll("[^0-9]", "");
                        worldEditVersion[1] = worldEditVersion[1].replaceAll("[^0-9]", "");
                        if (worldEditVersion[0].length() == 0 || worldEditVersion[1].length() == 0 || newVersion(worldEditVersion[0] + "." + worldEditVersion[1], "7.1")) {
                            validVersion = false;
                        }
                    }
                } else if (version.equals("unspecified")) {
                    validVersion = false;
                    Plugin fawe = Bukkit.getServer().getPluginManager().getPlugin("FastAsyncWorldEdit");
                    if (fawe != null) {
                        String apiVersion = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getAPIVersion();
                        String faweVersion = fawe.getDescription().getVersion();
                        double apiDouble = Double.parseDouble(apiVersion);
                        double faweDouble = Double.parseDouble(faweVersion);
                        if (apiDouble >= 1.13D && faweDouble >= 1.0D) {
                            validVersion = true;
                        }
                    }
                } else {
                    validVersion = false;
                }
            } else {
                int value;
                if (version.contains("-beta-")) {
                    version = version.split(";")[0];
                    version = version.split("-beta-")[1];
                    value = Integer.parseInt(version.replaceAll("[^0-9]", ""));
                    if (value < 6) {
                        validVersion = false;
                    }
                } else {
                    if (version.contains("+")) {
                        version = version.split("\\+")[1];
                    } else {
                        version = version.split(";")[1];
                    }

                    if (version.contains("-")) {
                        value = Integer.parseInt(version.split("-")[0].replaceAll("[^0-9]", ""));
                        if (value > 0 && value < 4268) {
                            validVersion = false;
                        }
                    }
                }
            }

            if (validVersion) {
                CoreProtectEditSessionEvent.register();
            } else {
                Chat.console(Phrase.build(Phrase.INTEGRATION_VERSION, new String[]{"WorldEdit"}));
            }
        } catch (Exception var9) {
            var9.printStackTrace();
        }

    }

 소스 분석

  WorldEdit 플러그인의 plugin.yml 에서 Version 정보를 추출 한 후 각종 기호를 제거 ==> 숫자(Number) 값으로 정보를 생성하는 과정에서 오류가 발생 하였다.

String version = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getVersion();
value = Integer.parseInt(version.replaceAll("[^0-9]", ""));
value = Integer.parseInt(version.split("-")[0].replaceAll("[^0-9]", ""));

 

2. 작업

  작업 대상 : WorldEdit 7.2.11 Beta 1 (1.13.2 - 1.19)

 

 수정 방법

반디집으로 worldedit-bukkit-7.2.11-beta-01 열람 한다.

  

plugin.yml을 편집기로 열람한다.

1. plugin.yml 을 열람한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

01+6200-0877589 정보를 임의로 변경한다.

0877589 으로 변경한다.

※ 가장 중요 : api-version: 1.13 ==> api-version: 1.13.1 등으로 변경한다.

변경하지 않는 경우 기 업로드되어  있는 기타 연동된 플러그인과 충돌 발생으로 옳바르게 동작하지 않는다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기