I2c RoboRio to Arduino and Back Again - I think we are missing a piece

So we have it working to send text to the Arduino from the RoboRio and that works great.
What are missing is getting a response back from the Arduino.
The code we have on the RoboRio is:

package frc.robot;

import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.I2C;  // Import the I2C Library

public class Robot extends TimedRobot {
    public static I2C arduino;
  public void robotInit() {
    arduino = new I2C(I2C.Port.kOnboard, 8);  //when robot turns on, assign arduino to the onboard I2C bus, and assign it port #8.

  public void testPeriodic() {
    byte[] sendData = "This is a test".getBytes();
    byte[] receiveData = new byte[sendData.length];
    arduino.transaction(sendData, sendData.length, receiveData, receiveData.length);
    System.out.println("Received" + new String(receiveData, 0, receiveData.length));


And the Arduino code is:

#include <Wire.h>

void setup() {
  Wire.begin(8);                // join i2c bus with address #8
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);           // start serial for output

void loop() {

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent()
  while (Wire.available()) {
    char c = Wire.read();

So the RoboRio code seems to have everything to expect a response but I think the Arduino code is not complete.
I think we need the Wire.onRequest(requestEvent); and then:

void requestEvent()
   //Some code to do stuff

Are we on the right track and can someone please help us? Most of the Arduino code on ChiefDelphi is to run LEDs and don’t require a response from the Arduino.