class_docstr: This annotator base class hosts a lightweight server that accepts
  annotation requests from CoreNLP.
  Each annotator simply defines 3 functions: requires, provides and annotate.
  
  This class takes care of defining appropriate endpoints to interface
  with CoreNLP.
docstr: Defines a Java property to define this annotator to CoreNLP.
docstr_tok: ["Defines","a","Java","property","to","define","this","annotator","to","CoreNLP","."]
code: def properties(self):
      """
      Defines a Java property to define this annotator to CoreNLP.
      """
      return {
          "customAnnotatorClass.{}".format(
              self.name
          ): "edu.stanford.nlp.pipeline.GenericWebServiceAnnotator",
          "generic.endpoint": "http://{}:{}".format(
              self.host, self.port
          ),
          "generic.requires": ",".join(self.requires),
          "generic.provides": ",".join(self.provides),
      }
  
file_path: stanza/stanza/server/annotator.py
imports: import io
  from multiprocessing import Process
  from http.server import BaseHTTPRequestHandler, HTTPServer
  from http import client
  from stanza.protobuf import Document, parseFromDelimitedString, writeToDelimitedString
label_desc: Use image node_id 5 for calling the Annotator obj's underlying member method code with example usage: obj.properties() and returns: dict