Sửa lỗi java.lang.nullpointerexception jwilder/nginx-proxy

Khi triển khai ứng dụng Java với Docker, jwilder/nginx-proxy là một công cụ cực kỳ hữu ích để tự động hóa reverse proxy và quản lý tên miền. Tuy nhiên, một trong những lỗi  mà các nhà phát triển thường gặp phải là java.lang.NullPointerException. Lỗi này đến từ ứng dụng Java, nhưng nó dường như chỉ xuất hiện sau khi tích hợp nginx-proxy, khiến việc xác định nguyên nhân trở nên khó khăn.

Bài viết này sẽ đi sâu vào việc phân tích tại sao lỗi này xảy ra và hướng dẫn bạn các bước sửa lỗi một cách có hệ thống, từ việc kiểm tra cấu hình proxy cho đến việc tinh chỉnh lại mã nguồn ứng dụng.

1. Cách sửa lỗi java.lang.nullpointerexception jwilder/nginx-proxy?

Cách 1:

 

 

Bước 1: Mở terminal trên máy chủ của bạn và chạy lệnh:

docker ps

Bạn sẽ thấy một danh sách các container đang chạy. Hãy tìm container chứa ứng dụng Java của bạn (không phải nginx-proxy).

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c3d5e9f2a1b3 jwilder/nginx-proxy “/app/docker-entrypo…” 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp myproject_nginx-proxy_1 a8b7c6d5e4f3 my-java-app:1.0 “java -jar /app/app.…” 2 hours ago Up 2 hours 8080/tcp myproject_java-app_1

Trong ví dụ này, tên container Java chúng ta cần là myproject_java-app_1.

Bước 2: Chạy lệnh sau (thay myproject_java-app_1 bằng tên container của bạn):

docker logs myproject_java-app_1

Bạn sẽ thấy rất nhiều dòng log. Hãy cuộn xuống dưới cùng hoặc tìm kiếm dòng chữ chứa java.lang.NullPointerException. Bạn sẽ thấy một khối văn bản trông giống như sau. Đây chính là “dấu vết lỗi” mà chúng ta cần.

2025-10-15 13:45:12.123 ERROR 1 — [http-nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
java.lang.NullPointerException: Cannot invoke “com.example.myapp.model.User.getUsername()” because “user” is null
at com.example.myapp.controller.UserController.getUserProfile(UserController.java:58)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
… (nhiều dòng khác)
Cách 2: Sử dụng Validation Annotation (Phổ biến trong các Framework)

Nếu bạn đang dùng một framework như Spring Boot hoặc Jakarta EE, hãy tận dụng các annotation để tự động kiểm tra giá trị null.

import javax.validation.constraints.NotNull;

// Trong một DTO (Data Transfer Object)
public class UserInput {
@NotNull(message = “Username cannot be null”)
private String username;

// getters and setters
}

// Trong Controller
@PostMapping(“/users”)
public ResponseEntity<String> createUser(@Valid @RequestBody UserInput userInput) {
// Nếu userInput.username là null, Spring sẽ tự động trả về lỗi HTTP 400
// Code bên trong sẽ không được thực thi, do đó tránh được NullPointerException
processUser(userInput);
return ResponseEntity.ok(“User created”);
}

Cách 3: Ghi Log Chi tiết Hơn (Defensive Logging)

Nếu bạn chưa thể tìm ra nguyên nhân, hãy chủ động thêm log để ghi lại toàn bộ thông tin của request trước khi code xử lý nó.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;

// … trong class Controller của bạn
private static final Logger logger = LoggerFactory.getLogger(MyController.class);

public void handleRequest(HttpServletRequest request) {
// Log tất cả các header của request
Collections.list(request.getHeaderNames()).forEach(headerName -> {
logger.info(“Header: {} = {}”, headerName, request.getHeader(headerName));
});

// Log các query parameter
logger.info(“Query String: {}”, request.getQueryString());

try {
// … PHẦN CODE CÓ THỂ GÂY LỖI CỦA BẠN …
String someValue = someObject.getSomeProperty(); // Dòng này có thể gây NPE
// …
} catch (Exception e) {
logger.error(“An error occurred while processing request!”, e);
throw e; // Ném lại lỗi để framework xử lý tiếp
}
}

 

Xem thêm:  Cài đặt Plugin chống copy nội dung cho website wordpress
0/5 (0 Reviews)