docs: @Override
      public TISearchResult Search(String CorpNum, MgtKeyType KeyType,
                                   String DType, String SDate, String EDate, String[] State,
                                   String[] Type, String[] TaxType, String[] IssueType, Boolean LateOnly,
                                   String TaxRegIDType, String TaxRegID, String TaxRegIDYN,
                                   String QString, Integer Page, Integer PerPage, String Order, String InterOPYN)
              throws PopbillException {
  
          if (KeyType == null)
              throw new PopbillException(-99999999, "관리번호형태가 입력되지 않았습니다.");
          if (DType == null || DType.isEmpty())
              throw new PopbillException(-99999999, "검색일자 유형이 입력되지 않았습니다.");
          if (SDate == null || SDate.isEmpty())
              throw new PopbillException(-99999999, "시작일자가 입력되지 않았습니다.");
          if (EDate == null || EDate.isEmpty())
              throw new PopbillException(-99999999, "종료일자가 입력되지 않았습니다.");
  
          String uri = "/Taxinvoice/" + KeyType;
          uri += "?DType=" + DType;
          uri += "&SDate=" + SDate;
          uri += "&EDate=" + EDate;
          uri += "&State=" + Arrays.toString(State)
                  .replaceAll("\\[|\\]|\\s", "");
          uri += "&Type=" + Arrays.toString(Type)
                  .replaceAll("\\[|\\]|\\s", "");
          uri += "&TaxType=" + Arrays.toString(TaxType)
                  .replaceAll("\\[|\\]|\\s", "");
  
          if (IssueType != null) {
              uri += "&IssueType=" + Arrays.toString(IssueType)
                      .replaceAll("\\[|\\]|\\s", "");
          }
  
          if (LateOnly != null) {
              if (LateOnly) {
                  uri += "&LateOnly=1";
              } else {
                  uri += "&LateOnly=0";
              }
          }
  
          if (TaxRegIDType != null && TaxRegIDType != "") {
              uri += "&TaxRegIDType=" + TaxRegIDType;
          }
  
          if (TaxRegID != null && TaxRegID != "") {
              uri += "&TaxRegID=" + TaxRegID;
          }
  
          if (TaxRegIDYN != null && TaxRegIDYN != "") {
              uri += "&TaxRegIDYN=" + TaxRegIDYN;
          }
  
          if (InterOPYN != null && InterOPYN != "") {
              uri += "&InterOPYN=" + InterOPYN;
          }
  
          if (QString != null && QString != "") {
              uri += "&QString=" + QString;
          }
  
          uri += "&Page=" + Integer.toString(Page);
          uri += "&PerPage=" + Integer.toString(PerPage);
          uri += "&Order=" + Order;
  
          return httpget(uri, CorpNum, null, TISearchResult.class);
      }