Estoy teniendo un problema con unas variables que envío con la etiqueta submit de vxml y un jsp que las recibe con request.getParameter, pues las estoy recibendo en NULL.
Esto es el fragmento del archivo VXML que envía las variables al archivo jsp:
Código HTML:
Ver original
<form id="DigaFrase"> <block> <assign name="constante" expr="'Calibra'"/> <assign name="IdLlam" expr="callId"/> <log expr="'@@ Entro a Diga Frase'"/> </block> <record name="file" beep="true" dtmfterm="true" maxtime="10s" finalsilence="3s" type="audio/wav;codec=ulaw"> <prompt> <audio src="builtin:prompts/diga_frase.vox"/> <audio src="builtin:prompts/frase_comun.vox"/> <audio src="builtin:prompts/Gato.vox"/> </prompt> <filled> <log expr="'@@ Grabando la frase:'"/> </filled> </record> <block> <!--application/x-www-form-urlencoded--> <log expr="'@@ Valor de constante: '+constante"/> <log expr="'@@ Valor de genero: '+genero"/> <log expr="'@@ Valor de IdLlam: '+IdLlam"/> <submit next="http://172.19.136.119:8080/salvar_graba.jsp" method="post" enctype="multipart/form-data" namelist="file constante genero IdLlam"/> </block> </form>
Esto es lo que me manda el Log del interprete de voz y donde se puede ver que si llevan contenido las variables:
2012-07-24/17:31:02.133 METRIC 000A0100-1000103D submit http://172.19.136.119:8080/salvar_graba.jsp|namelist|{"IdLlam":"000A0100-1000103D","constante":"Calibra","genero":"M","file ":"*recording*"}
Y este es el archivo JSP con el que necesito ayuda, porque al parecer no me está recibiendo el contenido o las variables y las pone en NULL:
Código Javascript:
Ver original
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"> <meta name="maintainer" content="IVR Genesys VoiceGenie to Record"/> <form id="Llama_JSP"> <block> <%@ page import="java.io.*" %> <%@ page import="java.sql.*" %> <% String saveFile=""; String contentType = request.getContentType(); if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) { DataInputStream in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength(); byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; while (totalBytesRead < formDataLength) { byteRead = in.read(dataBytes, totalBytesRead,formDataLength); totalBytesRead += byteRead; } String file = new String(dataBytes); String constante = request.getParameter("constante"); String genero = request.getParameter("genero"); String IdLlam = request.getParameter("IdLlam"); saveFile = file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0, saveFile.indexOf("\n")); saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); int lastIndex = contentType.lastIndexOf("="); String boundary = contentType.substring(lastIndex + 1,contentType.length()); int pos; pos = file.indexOf("filename=\""); pos = file.indexOf("\n", pos) + 1; pos = file.indexOf("\n", pos) + 1; pos = file.indexOf("\n", pos) + 1; int boundaryLocation = file.indexOf(boundary, pos) - 4; int startPos = ((file.substring(0, pos)).getBytes()).length; int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; saveFile="C:\\Calibracion\\"+saveFile; File f = new File(saveFile); FileOutputStream fileOut = new FileOutputStream(f); fileOut.write(dataBytes, startPos, (endPos - startPos)); fileOut.flush(); fileOut.close(); String nuevoNombre = constante + "_" + genero + "_" + IdLlam; File newFileName = new File("C:\\Calibracion\\"+nuevoNombre+".wav"); f.renameTo(newFileName); } %> <audio src="builtin:prompts/graba_satisfac.vox"/> <audio src="builtin:prompts/Gracias.vox"/> </block> </form> </vxml>
Las etiquetas de VXML las pongo porque es la unica forma en que el interprete de VXML reconoce el archivo jsp, si se las quito me dice que no puede leer el archivo jsp.
El archivo wav me lo genera con el nombre: null_null_null.wav funciona y se escucha perfectamente, lo que quiere decir que la variable file si pasa bien, pero aquí el problema es que las otras no están pasando bien.
Ahora bien, con respecto al atributo enctype="multipart/form-data" de la etiqueta submit, lei en internet que no puede recibir variables jsp con request.getParameter y las pone en NULL; se lo quité y el interprete de VXML en su log me manda un error que dice le hace falta "enctype of multipart/form-data" y creo que lo necesita para pasar el archivo de audio wav.
Pero, si esto es cierto:
1. ¿Porque me está pasando bien la variable file al jsp y lo guarda bien?
2. ¿Cual sería otra función que se podria ocupar para recibir las variables en jsp, en vez de request.getParameter?
3. Si alguien ha pasado por esto o parecido a esto, ¿Podrían pasarme el ejemplo de como se soluciono esto, por fa?
Muchas gracias por tomarse el tiempo para revisar este caso.
Marsh Rangel