Index: murachi/src/main/java/ve/gob/cenditel/murachi/MurachiRESTWS.java
===================================================================
--- murachi/src/main/java/ve/gob/cenditel/murachi/MurachiRESTWS.java	(revision efcd8d1e851de2979299a647e1c2a4ce0630758d)
+++ murachi/src/main/java/ve/gob/cenditel/murachi/MurachiRESTWS.java	(revision f326ef17eabd11299816b3787c367c9a0bdcc304)
@@ -335,5 +335,5 @@
 	 * @return archivo pasado como argumento del servidor
 	 */
-	/*
+	
 	private Response downloadFileFromServer(String fileName) {    
 	    String fileLocation = SERVER_UPLOAD_LOCATION_FOLDER + fileName;
@@ -361,6 +361,7 @@
 	    return response;
 	  }
-	*/
-	
+	
+	
+	/*
 	private Response downloadFileFromServer(String fileName) {    
 		logger.info("downloadFileFromServer{"+fileName+"}");
@@ -380,5 +381,5 @@
 	    if (checkFileExists(SERVER_UPLOAD_LOCATION_FOLDER + fileName + "-serialized.bin")) {
 	    	
-	    	logger.debug("	descarga de contenedor BDOC");
+	    	logger.debug("	descarga de contenedor BDOC: " + SERVER_UPLOAD_LOCATION_FOLDER + fileName + "-serialized.bin");
 	    	
 	    	try {				
@@ -388,4 +389,9 @@
 				// deserializar el contenedor 
 				c = deserialize(SERVER_UPLOAD_LOCATION_FOLDER + fileName + "-serialized.bin");
+				logger.debug("	deserializado contenedor: " + SERVER_UPLOAD_LOCATION_FOLDER + fileName + "-serialized.bin");
+				
+				logger.debug("numero de dataFile: "+ Integer.toString(c.getDataFiles().size()));
+				logger.debug("numero de firmas: "+ Integer.toString(c.getSignatures().size()));
+				
 			
 				// guardar el contenedor .bdoc
@@ -431,4 +437,5 @@
 	    return response;
 	  }
+	*/
 	
 	
@@ -2856,5 +2863,5 @@
 	}
 
-	// ------------> a seguir	
+		
 	
 	/**
@@ -2868,5 +2875,5 @@
 	@Produces(MediaType.APPLICATION_JSON)
 	public Response getSignatureNumber(@PathParam("containerId")  String containerId) {
-		logger.info("/bdocs/archivos/"+containerId);
+		logger.info("/bdocs/firmas/"+containerId);
 								
 		String fullPathBdocFile = SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized.bin";
@@ -2918,4 +2925,104 @@
 		return response;		
 	}
+	
+	
+	/**
+	 * Elimina una firma de un contendor firmado
+	 * 
+	 * @param containerId identificador del contenedor para eliminar la firma
+	 * @param signatureId identificador de la firma a eliminar
+	 * 
+	 * @return identificador del contenedor
+	 */
+	@GET
+	@Path("/bdocs/firmas/papelera/{containerId}/{signatureId}")
+	@Produces(MediaType.APPLICATION_JSON)
+	public Response removeSignature(@PathParam("containerId")  String containerId, @PathParam("signatureId") int signatureId) {
+		logger.info("recurso /bdocs/firmas/papelera/"+containerId+"/"+Integer.toString(signatureId));
+		
+		logger.debug("dataFileId: " + Integer.toString(signatureId));
+		
+		String fullPathBdocFile = SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized.bin";
+		logger.debug(fullPathBdocFile);
+		
+		
+		JSONObject json = new JSONObject();
+		int signatureNumber = 0;
+		
+		Response response = null;
+				
+		// Retrieve the file
+	    File file = new File(fullPathBdocFile);
+	    if (file.exists()) {
+	    		    	
+	    	Security.addProvider(new BouncyCastleProvider());
+						
+			Configuration configuration = new Configuration(Configuration.Mode.PROD);
+			configuration.loadConfiguration(DIGIDOC4J_CONFIGURATION);
+			configuration.setTslLocation(DIGIDOC4J_TSL_LOCATION);
+		
+			Container container = null;
+			
+			try {
+				container = deserialize(fullPathBdocFile);
+				logger.debug("	contenedor " + fullPathBdocFile + " deserializado");
+			} catch (ClassNotFoundException e) {
+
+				response = Response.status(500).entity("{\"error\": \"no se pudo leer el contenido del contenedor\"}").type("text/plain").build();
+				logger.error("no se pudo deserializar el contenedor para leer su contenido");
+			}
+			catch (IOException e) {
+				response = Response.status(500).entity("{\"error\": \"no se pudo leer el contenido del contenedor\"}").type("text/plain").build();
+				logger.error("no se pudo deserializar el contenedor para leer su contenido");
+			}
+				
+			// contenedor deserializado, ahora verficar que este firmado
+			signatureNumber = container.getSignatures().size();							
+			logger.debug("	signatureNumber: "+ Integer.toString(signatureNumber));
+			
+			if (signatureNumber < 1) 
+			{
+				// el archivo esta firmado y no se puede eliminar el dataFile
+				response = Response.status(200).entity("{\"error\": \"el contenedor no está firmado\"}").type("text/plain").build();
+				logger.error("el contenedor no está firmado.");
+			}
+			else
+			{				
+				if (signatureId >= signatureNumber)
+				{
+					// el dataFileId no es valido
+					response = Response.status(200).entity("{\"error\": \"el identificador de la firma a eliminar no es valido\"}").type("text/plain").build();
+					logger.error("el identificador de la firma a eliminar no es valido.");
+				}
+				else
+				{
+					// eliminar la firma
+					container.removeSignature(signatureId);
+					logger.debug("	eliminada signature: "+Integer.toString(signatureId));
+				
+					// serializar el contenedor de nuevo
+					try {
+						serialize(container, SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized");
+						logger.debug("	serializado contenedor:" + fullPathBdocFile + " serializado.");
+					
+						json.put("mensaje", "firma eliminada correctamente");				
+						response = Response.status(200).entity(json.toString()).build();
+					
+					} catch (IOException e) {
+						logger.error("error en la serializacion del contenedor: " + fullPathBdocFile);
+						response = Response.status(500).entity("{\"error\": \"no se serializar el contenedor\"}").type("text/plain").build();
+					}					
+				}				
+			}			
+		} else {
+	    	logger.error("El contenedor con id: "+containerId+ " no existe.");
+	    	json.put("error", "El contenedor con id: "+containerId+ " no existe.");
+	    	response = Response.status(404).entity(json.toString()).build();
+	    }
+		return response;
+			
+	}
+	
+	// ------------> a seguir
 	
 	
@@ -3091,5 +3198,5 @@
 	public Response postsignBDOCContainer(PostsignParameters postsignPar) throws IOException, MurachiException {
 		
-		logger.info("recurso /bdocs/resenas");
+		logger.info("recurso /bdocs/firmas/post");
 
 		// cadena con la firma
@@ -3100,13 +3207,5 @@
 		// obtener el id del archivo a firmar
 		String containerId = postsignPar.getContainerId();
-		
-		/*
-		HttpSession session = req.getSession(false);
-		
-		String fileId = (String) session.getAttribute("fileId");
-		System.out.println("fileId: " + fileId);
-		logger.debug("fileId: " + fileId);
-		*/
-		
+				
 		String signedBdoc = containerId + ".bdoc";
 		logger.debug("	sigendBdoc: " + signedBdoc);
@@ -3126,11 +3225,29 @@
 			logger.debug("asignada firma al contenedor");
 			
-			
+			/*
 			//deserializedContainer.save(SERVER_UPLOAD_LOCATION_FOLDER + signedBdoc);
 			serialize(deserializedContainer, SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized");
 			logger.debug(" serializado el contenedor: " + SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized");
-			
-			//
-			//File f = new File(serializedContainerId);
+			*/
+			
+			
+			// prueba para evitar que las firmas tengan la misma hora de aplicacion
+
+			// escribir el contendedor
+			deserializedContainer.save(SERVER_UPLOAD_LOCATION_FOLDER + containerId + ".bdoc");
+			
+			// abrir el contenedor
+			Configuration configuration = new Configuration(Configuration.Mode.PROD);			
+			configuration.loadConfiguration(DIGIDOC4J_CONFIGURATION);
+			configuration.setTslLocation(DIGIDOC4J_TSL_LOCATION);			
+			Container c = Container.open(SERVER_UPLOAD_LOCATION_FOLDER + containerId + ".bdoc", configuration);
+			logger.debug("	contenedor abierto: " + SERVER_UPLOAD_LOCATION_FOLDER + containerId + ".bdoc");			
+			
+			// serializar el contenedor
+			serialize(c, SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized");
+			logger.debug("	serializado contenedor: " + SERVER_UPLOAD_LOCATION_FOLDER + containerId + "-serialized");
+			
+			// eliminar el contenedor guardado
+			//File f = new File(SERVER_UPLOAD_LOCATION_FOLDER + containerId + ".bdoc");
 			//f.delete();
 			
@@ -3156,5 +3273,5 @@
 				
 		JSONObject jsonFinalResult = new JSONObject();
-		jsonFinalResult.put("signedFileId", containerId);
+		jsonFinalResult.put("signedFileId", containerId+".bdoc");
 		
 		logger.info(jsonFinalResult.toString());
