json java Process仅在第一次迭代时返回退出代码35

7d7tgy0s  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(85)

我用一个java Process调用curl来发送json文本到一个API。我在一个循环中调用这个代码,所有的更新都工作了,除了第一个,它失败了,退出代码35。我相信错误代码来自curl,是一个TLS/SSL连接错误。
这是重复调用的方法的核心。同样,只有第一次更新失败,所有后续更新都成功了。也许在建立初始File或ProcessBuilder时会有一些开销,然后这些开销会用于后续调用?

File f = new File("c:\\temp\\json.txt");
    String str = "{\"batch_fields\":{\"Batch Number\":\""+num+"\"}}";
    try(BufferedWriter writer = new BufferedWriter(new FileWriter(f))) { 
        writer.write(str);
    }
    StringBuilder sb = new StringBuilder();
    StringBuilder command = new StringBuilder("c:\\Program Files\\curl\\bin\\curl -H \"X-Token: "+BatchUtils.API_TOKEN_READ_WRITE+"\"");
    command.append(" -X PUT -H \"Content-Type: application/json\" ");
    command.append(" -d \"@c:\\temp\\json.txt\" ");
    command.append("https://blah/blah/batches/"+batchId+"\"");
            
    ProcessBuilder processBuilder = new ProcessBuilder(command.toString().split(" "));
    Process process = processBuilder.start();
    InputStream is = process.getInputStream();
    if(is == null || is.read() == -1) {
        is = process.getErrorStream();
        sb.append(" Failed updateBatchNumber: " + is.toString());
    }
    else
        sb.append(" Updated batch number";
    
    int exitCode = process.waitFor();
    sb.append(". exit code: " + exitCode);
    process.destroy();

字符串

frebpwbc

frebpwbc1#

首先尝试简化到下面。当然,json的创建不太合适,但我暂时保持原样。当你得到正确的错误输出时,你可以添加更多,下面应该给你给予:

String str = "{\"batch_fields\":{\"Batch Number\":\"" + num + "\"}}";
        Files.writeString(Path.of("C:/temp/json.txt"), str);
        List<String> command = new ArrayList<>();
        command.add("c:\\Program Files\\curl\\bin\\curl");
        command.addAll(List.of("-H", "X-Token: " + BatchUtils.API_TOKEN_READ_WRITE));

        command.addAll(List.of("-X", "PUT"));
        command.addAll(List.of("-H", "Content-Type: application/json"));
        command.addAll(List.of("-d", "@c:\\temp\\json.txt"));
        command.add("https://blah/blah/batches/" + batchId);

        new ProcessBuilder(command).inheritIO().start();

字符串

相关问题