Ejemplo n.º 1
0
  /* füllt das Objekt mit den Rückgabedaten. Dazu wird zuerst eine Liste aller
  Segmente erstellt, die Rückgabedaten für diesen Task enthalten. Anschließend
  werden die HBCI-Rückgabewerte (RetSegs) im outStore gespeichert. Danach werden
  die GV-spezifischen Daten im outStore abgelegt */
  public void fillJobResult(HBCIMsgStatus status, int offset) {
    try {
      executed = true;
      Properties result = status.getData();

      // nachsehen, welche antwortsegmente ueberhaupt
      // zu diesem task gehoeren

      // res-num --> segmentheader (wird für sortierung der
      // antwort-segmente benötigt)
      Hashtable<Integer, String> keyHeaders = new Hashtable<Integer, String>();
      for (Enumeration i = result.keys(); i.hasMoreElements(); ) {
        String key = (String) (i.nextElement());
        if (key.startsWith("GVRes") && key.endsWith(".SegHead.ref")) {

          String segref = result.getProperty(key);
          if ((Integer.parseInt(segref)) - offset == idx) {
            // nummer des antwortsegments ermitteln
            int resnum = 0;
            if (key.startsWith("GVRes_")) {
              resnum = Integer.parseInt(key.substring(key.indexOf('_') + 1, key.indexOf('.')));
            }

            keyHeaders.put(
                new Integer(resnum), key.substring(0, key.length() - (".SegHead.ref").length()));
          }
        }
      }

      saveBasicValues(result, idx + offset);
      saveReturnValues(status, idx + offset);

      // segment-header-namen der antwortsegmente in der reihenfolge des
      // eintreffens sortieren
      Object[] resnums = keyHeaders.keySet().toArray(new Object[0]);
      Arrays.sort(resnums);

      // alle antwortsegmente durchlaufen
      for (int i = 0; i < resnums.length; i++) {
        // dabei reihenfolge des eintreffens beachten
        String header = keyHeaders.get(resnums[i]);

        extractPlaintextResults(status, header, contentCounter);
        extractResults(status, header, contentCounter++);
        // der contentCounter wird fuer jedes antwortsegment um 1 erhoeht
      }
    } catch (Exception e) {
      String msg = HBCIUtilsInternal.getLocMsg("EXCMSG_CANTSTORERES", getName());
      if (!HBCIUtilsInternal.ignoreError(
          getMainPassport(),
          "client.errors.ignoreJobResultStoreErrors",
          msg + ": " + HBCIUtils.exception2String(e))) {
        throw new HBCI_Exception(msg, e);
      }
    }
  }