#vulnerable code 
                                public static void main(String[] args) throws InterruptedException, TimeoutException, ExecutionException {
        ProtocolV1Client client = new ProtocolV1Client();
        client.connect("127.0.0.1", 8811, 500);

        Map<String, String> head = new HashMap<>();
        head.put("tracerId", "xxadadadada");
        head.put("token", "adadadad");

        BranchCommitRequest body = new BranchCommitRequest();
        body.setBranchId(12345L);
        body.setApplicationData("application");
        body.setBranchType(BranchType.AT);
        body.setResourceId("resource-1234");
        body.setXid("xid-1234");

        RpcMessage rpcMessage = new RpcMessage();
        rpcMessage.setId(client.idGenerator.incrementAndGet());
        rpcMessage.setCodec(CodecType.SEATA.getCode());
        rpcMessage.setCompressor(ProtocolConstants.CONFIGURED_COMPRESSOR);
        rpcMessage.setHeadMap(head);
        rpcMessage.setBody(body);
        rpcMessage.setMessageType(ProtocolConstants.MSGTYPE_RESQUEST);

        Future future = client.send(rpcMessage.getId(), rpcMessage);
        RpcMessage resp = (RpcMessage) future.get(200, TimeUnit.SECONDS);

        System.out.println(resp.getId() + " " + resp.getBody());
    } 
                            #location 25 
                            #vulnerability type NULL_DEREFERENCE
#fixed code
                                public static void main(String[] args) {
        ProtocolV1Client client = new ProtocolV1Client();
        client.connect("127.0.0.1", 8811, 500);

        Map<String, String> head = new HashMap<>();
        head.put("tracerId", "xxadadadada");
        head.put("token", "adadadad");

        BranchCommitRequest body = new BranchCommitRequest();
        body.setBranchId(12345L);
        body.setApplicationData("application");
        body.setBranchType(BranchType.AT);
        body.setResourceId("resource-1234");
        body.setXid("xid-1234");

        final int threads = 50;
        final AtomicLong cnt = new AtomicLong(0);
        final ThreadPoolExecutor service1 = new ThreadPoolExecutor(threads, threads, 0L, TimeUnit.MILLISECONDS,
                new SynchronousQueue<Runnable>(), new NamedThreadFactory("client-", false));// 无队列
        for (int i = 0; i < threads; i++) {
            service1.execute(() -> {
                while (true) {
                    try {
                        Future future = client.sendRpc(head, body);
                        RpcMessage resp = (RpcMessage) future.get(200, TimeUnit.MILLISECONDS);
                        if (resp != null) {
                            cnt.incrementAndGet();
                        }
                    } catch (Exception e) {
                        // ignore
                    }
                }
            });
        }

        Thread thread = new Thread(new Runnable() {
            private long last = 0;

            @Override
            public void run() {
                while (true) {
                    long count = cnt.get();
                    long tps = count - last;
                    LOGGER.error("last 1s invoke: {}, queue: {}", tps, service1.getQueue().size());
                    last = count;

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                }
            }
        }, "Print-tps-THREAD");
        thread.start();
    }