Datas problemáticas em Java

Estou criando um projeto no qual preciso enviar duas datas, o problema em si,está sendo sempre o retorno de um nullpointer exception, independente de qual meio tente tomar, seja trocando a classe para Calendar, ou Date, o resultado é sempre o mesmo. Segue o código:
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public void adiciona(NotaFiscal notaFiscal) {
		String sql = "INSERT INTO notafiscal (descricao, dataFaturamento, dataPagamento, status) values (?,?,?,?);";

		try {
			PreparedStatement stmt = conexao.prepareStatement(sql);
			stmt.setString(1, notaFiscal.getDescricao());
			DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy");
			stmt.setDate(2, Date.valueOf((notaFiscal.getDataFaturamento().format(formatador))));
			stmt.setDate(3, Date.valueOf((notaFiscal.getDataPagamento().format(formatador))));
			stmt.setString(4, notaFiscal.getStatus());
			} catch (SQLException e) {
			e.printStackTrace();
			}
	}

Posa o stack trace do nullPointe, é importante saber onde acontece.
Também é importante vc saber que nullPointer ocorre quando vc tenta manipular algo NULO, logo, não importa o tipo da classe que vc coloque, NULO é NULO, vai dar nullPointer ao manipular e não há tipo de classe que resolva.
A solução é: ou vc trata, veficando previamente se é nulo ou evita que o objeto seja enviado nulo.
Neste caso provavelmente sua data está vindo nula, debuga, certifique-se antes que estás recebendo este valor.

Exception in thread "main" java.lang.NullPointerException
	at com.solucao.iteris.dao.NotaFiscalDao.adiciona(NotaFiscalDao.java:30)
	at teste.main(teste.java:26)

Eu consegui fazer esse tratamento porém da mesma maneira ele não retorna a data desejada, ou seja, o get está retornando um null para o bd.

public void adiciona(NotaFiscal notaFiscal) {
String sql = “INSERT INTO notafiscal (descricao, dataFaturamento, dataPagamento, status) values (?,?,?,?);”;

	try {
		PreparedStatement stmt = conexao.prepareStatement(sql);
		stmt.setString(1, notaFiscal.getDescricao());
		SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

		if(notaFiscal.getDataFaturamento() != null) {
			stmt.setDate(2, java.sql.Date.valueOf(formatador.format(notaFiscal.getDataFaturamento())));
		}
		
		if(notaFiscal.getDataPagamento() != null) {
		stmt.setDate(3, java.sql.Date.valueOf(formatador.format(notaFiscal.getDataPagamento())));
		}
		stmt.setString(4, notaFiscal.getStatus());
		} catch (SQLException e) {
		e.printStackTrace();
		}

faz essa verificação:

public void adiciona(NotaFiscal notaFiscal) {

// veja se isto esta funcionando corretamente
System.out.println(Date.valueOf((notaFiscal.getDataPagamento().format(formatador)));
	
}

Retornou esse exception:
Exception in thread “main” java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at com.solucao.iteris.dao.NotaFiscalDao.adiciona(NotaFiscalDao.java:39)
at teste.main(teste.java:26)

É erro no Fomatter, muda o padrão para “yyyy-dd-MM”; veja se funciona

Exatamente o mesmo erro retornado

DataPagamento é de quê tipo?

Antes era LocalDate, depois, para fim de questões troquei para o Date.

wtf, se é Date pq vc está tentando converter pra Date?
Tua lógica tá zoada.
Vamos começar do inicio:
Aparentemente vc quer salvar as datas no banco, mas dá incompatibilidade com suas datas do tipo java.util.Date com o preparedStatement que recebe apenas sql.Date, ai vc quer fazer a conversão. certo? pra isso vc faz o seguinte:
Tendo em vista que DataPagamento seja do tipo util.Date, é só fazer o seguinte:
stmt.setDate(3, new java.sql.Date(notaFiscal.getDataPagamento().getTime()));

Eu sempre mando no PreparedStatement() uma String com a data no formato aceito pelo banco, tipo “yyyy-dd-MM”;

Não recomendo, pq o padrão do banco poder ser alterado. Ai seu programa buga.
Até onde eu sei, pra ser genérico é mandar Date.