What is Null point access

Driver and Sequencer can use a pair of built-in pull ports to communicate transactions. Driver calls seq_item_port.get_next_item() to have sequencer produce transactions and pass to driver.

//in uvm_driver:
uvm_seq_item_pull_port #(REQ, RSP) seq_item_port;
//in uvm_sequencer:
uvm_seq_item_pull_export #(REQ, RSP) seq_item_export;
//in agent:
driver.seq_item_port.connect(sequencer.seq_item_export);

uvm_analysis_port is used to broadcast the transactions to a list of uvm_analysis_export ports. When you declare uvm_analysis_port in your driver, it means driver wants to broadcast the transactions to its peer exports, is this your purpose? Probably not.

Usually, uvm_analysis_port is used in monitor so that it can broadcast the collected transactions to uvm_analysis_export ports in coverage or scoreboard etc. components for further analysis.