public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    super.doPost(request);
    JAASUserPrincipal userPrincipal = (JAASUserPrincipal) request.getUserPrincipal();
    String sIdSesion = userPrincipal.getName();
    Sesion sSesion = PasarelaAdmcar.listaSesiones.getSesion(sIdSesion);
    String sIdEntidad = request.getParameter(EnviarSeguro.idEntidad);
    sSesion.setIdEntidad(sIdEntidad);

    List lista = getMunicipiosEntidad(sIdEntidad);
    MunicipalityOperations municipalityOperations = new MunicipalityOperations();
    List listMunicipios = municipalityOperations.construirListaMunicipios(lista);

    // *****************************
    // Ordenacion de los municipios
    // *****************************
    Collections.sort(
        listMunicipios,
        new java.util.Comparator() {
          public int compare(Object o1, Object o2) {
            com.geopista.app.catastro.model.beans.Municipio p1 =
                (com.geopista.app.catastro.model.beans.Municipio) o1;
            com.geopista.app.catastro.model.beans.Municipio p2 =
                (com.geopista.app.catastro.model.beans.Municipio) o2;
            return p1.getNombreOficial().compareToIgnoreCase(p2.getNombreOficial());
          }
        });

    sSesion.setAlMunicipios(listMunicipios);

    CResultadoOperacion resultado = new CResultadoOperacion(true, sSesion.getIdSesion());

    Vector vector = new Vector();
    vector.addElement(sIdEntidad);
    vector.addElement(lista);
    resultado.setVector(vector);
    response.setContentType("text/html");
    Writer writer = response.getWriter();
    writer.write(resultado.buildResponse());
    writer.flush();
    writer.close();
  }
  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {
    super.doPost(request);
    logger.debug("Inicio.");

    PrintWriter out = response.getWriter();

    try {

      CResultadoOperacion resultadoOperacion;

      JAASUserPrincipal jassUserPrincipal = (JAASUserPrincipal) request.getUserPrincipal();
      PasarelaAdmcar.listaSesiones =
          (ListaSesiones)
              SessionsContextShared.getContextShared()
                  .getSharedAttribute(this.getServletContext(), "UserSessions");
      Sesion userSession = PasarelaAdmcar.listaSesiones.getSesion(jassUserPrincipal.getName());

      Principal userPrincipal = userSession.getUserPrincipal();
      Enumeration userPerms = userSession.getRoleGroup().members();

      /* - antes de MultipartPostMethod -
      String stream = request.getParameter("mensajeXML");
         logger.info("stream="+stream);
         */

      /* MultipartPostMethod */
      String stream = null;
      /** Recogemos los nuevos ficheros annadidos */
      Hashtable fileUploads = new Hashtable();
      // Create a new file upload handler
      DiskFileUpload upload = new DiskFileUpload();

      /** Set upload parameters */
      upload.setSizeThreshold(CConstantesComando.MaxMemorySize);
      upload.setSizeMax(CConstantesComando.MaxRequestSize);
      /*
      String yourTempDirectory= "anexos" + File.separator;
      upload.setRepositoryPath(yourTempDirectory);
      */

      // Parse the request
      try {
        //               request.setCharacterEncoding("ISO-8859-1");
        List items = upload.parseRequest(request);

        // Process the uploaded items
        Iterator iter = items.iterator();
        String sMunicipio = "";
        while (iter.hasNext()) {
          FileItem item = (FileItem) iter.next();

          String fieldName = item.getFieldName();
          if (item.isFormField()) {
            if (fieldName.equalsIgnoreCase("mensajeXML")) {
              stream = item.getString("ISO-8859-1");
              logger.info("MENSAJE XML:" + item.getString("ISO-8859-1"));
              System.out.println(
                  "CServletLicencias.doPost mensajeXML=" + item.getString("ISO-8859-1"));
            } else if (fieldName.equalsIgnoreCase(
                com.geopista.protocol.net.EnviarSeguro.idMunicipio)) {
              sMunicipio = item.getString("ISO-8859-1");
              userSession.setIdMunicipio(sMunicipio);
            }
          } else {
            CAnexo anexo = new CAnexo();
            /** Debido a que el nombre del fichero puede contener acentos. */
            fieldName = URLDecoder.decode(fieldName, "ISO-8859-1");
            anexo.setFileName(fieldName);
            anexo.setContent(item.get());
            fileUploads.put(fieldName, anexo);
          }
        }

      } catch (FileUploadBase.SizeLimitExceededException ex) {
        String respuesta =
            buildResponse(
                new CResultadoOperacion(false, "FileUploadBase.SizeLimitExceededException"));
        out.print(respuesta);
        out.flush();
        out.close();
        logger.warn("************************* FileUploadBase.SizeLimitExceededException");
        return;
      }

      // **********************************************************
      // ** Chequeamos
      // ******************************************************
      if ((stream == null) || (stream.trim().equals(""))) {
        String respuesta = buildResponse(new CResultadoOperacion(false, "stream es null"));
        out.print(respuesta);
        out.flush();
        out.close();
        logger.warn("stream null or empty. stream: " + stream);
        return;
      }

      StringReader sw = new StringReader(stream);
      logger.info("sw=" + sw.toString());

      CEnvioOperacion envioOperacion =
          (com.geopista.protocol.CEnvioOperacion)
              Unmarshaller.unmarshal(com.geopista.protocol.CEnvioOperacion.class, sw);
      logger.debug("envioOperacion.getComando(): " + envioOperacion.getComando());

      // CResultadoOperacion resultadoOperacion;
      String numExpediente;
      CSolicitudLicencia solicitudLicencia;
      CExpedienteLicencia expedienteLicencia;
      Hashtable hash;
      Vector vector = new Vector();

      switch (envioOperacion.getComando()) {
        case CConstantesComando.CMD_LICENCIAS_CREAR_EXPEDIENTE:
          solicitudLicencia = envioOperacion.getSolicitudLicencia();
          expedienteLicencia = envioOperacion.getExpedienteLicencia();

          /** inicio */
          /*
           * Cargamos en una hash los nombres de los anexos de la solicitud (marcados como annadidos, borrados, sin marcar).
           * El contenido de los marcados como annadidos, so se encuentra en el xml, sino en la hash fileUploads.
           */

          /* ANEXOS de solicitud. En la creacion no hay mejora de datos ni alegacion.
           * No tienen contenido.
           * Nos interesara recoger el estado (annadido, borrado) y el tipo de anexo.
           */
          /* SOLICITUD **/
          solicitudLicencia.setAnexos(
              actualizarAnexosUploaded(solicitudLicencia.getAnexos(), fileUploads));

          resultadoOperacion =
              COperacionesDatabaseLicencias.crearExpedienteLicencias(
                  solicitudLicencia,
                  expedienteLicencia,
                  userPrincipal,
                  userSession.getIdMunicipio());
          break;

        case CConstantesComando.CMD_LICENCIAS_MODIFICAR_EXPEDIENTE:
          solicitudLicencia = envioOperacion.getSolicitudLicencia();
          expedienteLicencia = envioOperacion.getExpedienteLicencia();

          /** inicio */
          /*
           * Cargamos en una hash los nombres de los anexos de la solicitud (marcados como annadidos, borrados, sin marcar).
           * El contenido de los marcados como annadidos, so se encuentra en el xml, sino en la hash fileUploads.
           */

          /*
           * No tienen contenido.
           * Nos interesara recoger el estado (annadido, borrado) y el tipo de anexo.
           */
          /** ANEXOS SOLICITUD */
          solicitudLicencia.setAnexos(
              actualizarAnexosUploaded(solicitudLicencia.getAnexos(), fileUploads));

          /* ANEXOS MEJORA DE DATOS */
          Vector vMejoras = solicitudLicencia.getMejoras();
          Vector vM = new Vector();
          if (vMejoras != null) {
            for (Enumeration e = vMejoras.elements(); e.hasMoreElements(); ) {
              Mejora mejora = (Mejora) e.nextElement();
              mejora.setAnexos(actualizarAnexosUploaded(mejora.getAnexos(), fileUploads));
              vM.add(mejora);
            }
            solicitudLicencia.setMejoras(vM);
          }

          /* ANEXOS ALEGACION */
          Alegacion alegacion = expedienteLicencia.getAlegacion();
          if (alegacion != null) {
            alegacion.setAnexos(actualizarAnexosUploaded(alegacion.getAnexos(), fileUploads));
            expedienteLicencia.setAlegacion(alegacion);
          }

          resultadoOperacion =
              COperacionesDatabaseLicencias.modificarExpedienteLicencias(
                  solicitudLicencia,
                  expedienteLicencia,
                  userPrincipal,
                  userSession.getIdMunicipio());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_LICENCIA:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposLicencia());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_OBRA:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposObra());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_ANEXO:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposAnexo());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_ESTADOS_DISPONIBLES:
          resultadoOperacion = new CResultadoOperacion(true, "");
          expedienteLicencia = (CExpedienteLicencia) envioOperacion.getParametro();
          int idTipoLicencia =
              new Integer(expedienteLicencia.getTipoLicenciaDescripcion()).intValue();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getEstadosDisponibles(
                  expedienteLicencia, idTipoLicencia));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_ESTADOS_PERMITIDOS:
          resultadoOperacion = new CResultadoOperacion(true, "");
          expedienteLicencia = (CExpedienteLicencia) envioOperacion.getParametro();
          idTipoLicencia = new Integer(expedienteLicencia.getTipoLicenciaDescripcion()).intValue();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getEstadosPermitidos(
                  expedienteLicencia, userPerms, idTipoLicencia));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_ESTADOS:
          resultadoOperacion = new CResultadoOperacion(true, "");
          Vector tiposLicencia = (Vector) envioOperacion.getTiposLicencia();
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getEstados(tiposLicencia));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_VIAS_NOTIFICACION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getViasNotificacion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SOLICITUD_LICENCIA:
          resultadoOperacion = new CResultadoOperacion(true, "");
          numExpediente = (String) envioOperacion.getParametro();
          String locale = (String) envioOperacion.getParametro2();
          tiposLicencia = (Vector) envioOperacion.getTiposLicencia();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getExpedienteLicencia(
                  numExpediente, userSession.getIdMunicipio(), locale, tiposLicencia);
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SOLICITUDES_LICENCIA:
          resultadoOperacion = new CResultadoOperacion(true, "");
          locale = (String) envioOperacion.getParametro2();
          tiposLicencia = (Vector) envioOperacion.getTiposLicencia();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getSolicitudesLicencia(locale, tiposLicencia);
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_EXPEDIENTES:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedExpedientes(
                  hash,
                  userPerms,
                  userSession.getIdMunicipio(),
                  envioOperacion.getTiposLicencia()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_EXPEDIENTES_PLANOS:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setExpedientes(
              COperacionesDatabaseLicencias.getSearchedExpedientesPlanos(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia()));
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedReferenciasPlanos(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia()));

          break;
        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_REFERENCIAS_CATASTRALES:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedReferenciasCatastrales(
                  hash, userSession.getIdMunicipio()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_ADDRESSES:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedAddresses(
                  hash, userSession.getIdMunicipio()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_ADDRESSES_BY_NUMPOLICIA:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedAddressesByNumPolicia(
                  hash, userSession.getIdMunicipio()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SEARCHED_PERSONAS:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getSearchedPersonas(
                  hash, userSession.getIdMunicipio()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_FINALIZACION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposFinalizacion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_TRAMITACION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposTramitacion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_TIPOS_NOTIFICACION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getTiposNotificacion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_ESTADOS_NOTIFICACION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getEstadosNotificacion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_ESTADOS_RESOLUCION:
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getEstadosResolucion());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_NOTIFICACIONES:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(COperacionesDatabaseLicencias.getNotificaciones(hash));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_PARCELARIO:
          resultadoOperacion = new CResultadoOperacion(true, "");
          hash = envioOperacion.getHashtable();
          resultadoOperacion.setVector(
              COperacionesDatabaseLicencias.getParcelario(hash, userSession.getIdMunicipio()));
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_SOLICITUDES_EXPEDIENTES_INFORME:
          hash = envioOperacion.getHashtable();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getSolicitudesExpedientesInforme(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia());
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_PLANTILLAS:
          String aplicacion = (String) envioOperacion.getParametro();
          vector = COperacionesDatabaseLicencias.getPlantillas(aplicacion);
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(vector);
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_NOTIFICACIONES_MENU:
          hash = envioOperacion.getHashtable();
          vector =
              COperacionesDatabaseLicencias.getNotificacionesMenu(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia());
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(vector);
          break;

        case CConstantesComando.CMD_LICENCIAS_GET_EVENTOS:
          hash = envioOperacion.getHashtable();
          locale = (String) envioOperacion.getParametro();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getEventos(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia(), locale);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_ULTIMOS_EVENTOS:
          hash = envioOperacion.getHashtable();
          locale = (String) envioOperacion.getParametro();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getUltimosEventos(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia(), locale);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_EVENTOS_SIN_REVISAR:
          hash = envioOperacion.getHashtable();
          locale = (String) envioOperacion.getParametro();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getEventosSinRevisar(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia(), locale);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_HISTORICO:
          hash = envioOperacion.getHashtable();
          locale = (String) envioOperacion.getParametro();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getHistorico(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia(), locale);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_HISTORICO_EXPEDIENTE:
          hash = envioOperacion.getHashtable();
          locale = (String) envioOperacion.getParametro();
          resultadoOperacion =
              COperacionesDatabaseLicencias.getHistorico(
                  hash, userSession.getIdMunicipio(), envioOperacion.getTiposLicencia(), locale);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_NOTIFICACIONES_PENDIENTES:
          hash = envioOperacion.getHashtable();
          vector =
              COperacionesDatabaseLicencias.getNotificacionesPendientes(
                  userSession.getIdMunicipio(), envioOperacion.getTiposLicencia());
          resultadoOperacion = new CResultadoOperacion(true, "");
          resultadoOperacion.setVector(vector);
          break;
        case CConstantesComando.CMD_LICENCIAS_GET_EVENTOS_PENDIENTES:
          resultadoOperacion =
              COperacionesDatabaseLicencias.getEventosPendientes(
                  userSession.getIdMunicipio(),
                  userPerms,
                  envioOperacion.getTiposLicencia(),
                  (String) envioOperacion.getParametro());
          break;
        case CConstantesComando.CMD_LICENCIAS_BLOQUEAR_EXPEDIENTE:
          boolean bloquear = ((Boolean) envioOperacion.getParametro()).booleanValue();
          numExpediente = envioOperacion.getExpedienteLicencia().getNumExpediente();
          resultadoOperacion =
              COperacionesDatabaseLicencias.bloquearExpediente(numExpediente, bloquear);
          break;
        case CConstantesComando.CMD_INSERTAR_INFORME:
          resultadoOperacion =
              COperacionesDatabaseLicencias.insertarInforme(
                  (Informe) envioOperacion.getParametro(), fileUploads);
          break;
        case CConstantesComando.CMD_LICENCIAS_ACTUALIZAR_IDSIGEM:
          expedienteLicencia = envioOperacion.getExpedienteLicencia();
          resultadoOperacion = COperacionesDatabaseLicencias.actualizarIdSigem(expedienteLicencia);
          break;
        case CConstantesComando.CMD_LICENCIAS_OBTENER_IDSIGEM:
          expedienteLicencia = envioOperacion.getExpedienteLicencia();
          resultadoOperacion = COperacionesDatabaseLicencias.obtenerIdSigem(expedienteLicencia);
          break;
        case CConstantesComando.CMD_LICENCIAS_ACTUALIZAR_ESTADOSIGEM:
          expedienteLicencia = envioOperacion.getExpedienteLicencia();
          resultadoOperacion =
              COperacionesDatabaseLicencias.checkExpedientePublicado(
                  expedienteLicencia, userSession.getIdMunicipio());
          break;
        case CConstantesComando.CMD_LICENCIAS_PUBLICAR_EXPEDEINTE_SIGEM:
          expedienteLicencia = envioOperacion.getExpedienteLicencia();
          solicitudLicencia = envioOperacion.getSolicitudLicencia();
          resultadoOperacion =
              COperacionesDatabaseLicencias.publicarExpedienteSigem(
                  expedienteLicencia, solicitudLicencia, userSession.getIdMunicipio());
          break;

        case CConstantesComando.CMD_LICENCIAS_ANEXO_ALFRESCO:
          resultadoOperacion =
              COperacionesDatabaseLicencias.anexoAlfresco(
                  envioOperacion.getSolicitudLicencia().getIdSolicitud(),
                  envioOperacion.getSolicitudLicencia().getAnexos(),
                  userPrincipal);
          break;

        case CConstantesComando.CMD_LICENCIAS_ANEXO_GETID:
          resultadoOperacion =
              COperacionesDatabaseLicencias.getAnexoId(
                  (String) envioOperacion.getParametro(), (Long) envioOperacion.getParametro2());
          break;

        default:
          logger.warn(
              "Comand not found. envioOperacion.getComando(): " + envioOperacion.getComando());
          resultadoOperacion = new CResultadoOperacion(false, "Command not found");
      }

      String respuesta = buildResponse(resultadoOperacion);
      out.print(respuesta);
      out.flush();
      out.close();

    } catch (Exception ex) {
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      ex.printStackTrace(pw);
      logger.error("Exception: " + sw.toString());
    }
  }