opendap/src/main/java/ucar/nc2/dods/DODSNetcdfFile.java
DataDDS readDataDDSfromServer(String CE) throws IOException, opendap.dap.DAP2Exception
  {
    if (debugServerCall) System.out.println("DODSNetcdfFile.readDataDDSfromServer = <" + CE + ">");

    long start = 0;
    if (debugTime) start = System.currentTimeMillis();

    if (!CE.startsWith("?"))
      CE = "?" + CE;
    DataDDS data;
    synchronized (this) {
      data = dodsConnection.getData(CE, null);
    }
    if (debugTime)
      System.out.println("DODSNetcdfFile.readDataDDSfromServer took = " + (System.currentTimeMillis() - start) / 1000.0);

    if (debugDataResult) {
      System.out.println(" dataDDS return:");
      data.print(System.out);
    }

    return data;
  }
DataDDS readDataDDSfromServer(String CE) throws IOException, opendap.dap.DAP2Exception
  {
    if (debugServerCall) System.out.println("DODSNetcdfFile.readDataDDSfromServer = <" + CE + ">");

    long start = 0;
    if (debugTime) start = System.currentTimeMillis();

    if (!CE.startsWith("?"))
      CE = "?" + CE;
    DataDDS data;
    synchronized (this) {
      data = dodsConnection.getData(CE, null);
    }
    if (debugTime)
      System.out.println("DODSNetcdfFile.readDataDDSfromServer took = " + (System.currentTimeMillis() - start) / 1000.0);

    if (debugDataResult) {
      System.out.println(" dataDDS return:");
      data.print(System.out);
    }

    return data;
  }
This does the actual connection to the opendap server and reading of the data.
All data calls go through here so we can add debugging.

@param CE constraint expression; use empty string if none
@return DataDDS
@throws java.io.IOException                on io error
@throws opendap.dap.parsers.ParseException
if error parsing return
@throws opendap.dap.DAP2Exception          if you have otherwise been bad