2012-09-04 24 views
6

¿Cómo puedo convertir un HttpServletRequest en String? Necesito deshacer el HttpServletRequest, pero cuando lo intento, mi programa arroja una excepción.Cómo convertir una HttpServletRequest a String?

javax.xml.bind.UnmarshalException 
- with linked exception: 
[java.io.IOException: Stream closed] 
     at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:197) 
     at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168) 
     at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) 
     at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184) 
     at com.orange.oapi.parser.XmlParsing.parse(XmlParsing.java:33) 

He probado el código siguiente para Resolver referencia al HttpServletRequest.

InputStreamReader is = 
       new InputStreamReader(request.getInputStream()); 
InputStream isr = request.getInputStream(); 
ServletInputStream req = request.getInputStream(); 

Mi método analizador:

public root parse(InputStreamReader is) throws Exception { 
     root mc = null; 
     try { 
      JAXBContext context = JAXBContext.newInstance(root.class); 
      Unmarshaller um = context.createUnmarshaller(); 
      mc = (root) um.unmarshal(is); 
     } catch (JAXBException je) { 
      je.printStackTrace(); 
     } 
     return mc; 
    } 
+2

¿Desea la Solicitud, un encabezado HTTP específico, el cuerpo, ...? –

+0

hola quiero convertir la solicitud HttpServlet en String. – BKK

+0

Agregue un ejemplo de cómo podría ser una Cadena. –

Respuesta

4

Tengo la impresión de que está tratando de leer desde el flujo de entrada después de que haya tramitado la solicitud y respondió a su cliente. ¿Dónde pusiste tu código?

Si primero desea manejar la solicitud y luego deshace la clasificación, primero debe leer la cadena de entrada en una cadena. Esto funciona bien si se trata de pequeñas solicitudes que está manejando.

Sugiero usar algo como apache commons IOUtils para hacer esto por usted.

String marshalledXml = org.apache.commons.io.IOUtils.toString(request.getInputStream()); 

También hay que tener en cuenta que usted tiene que elegir entre request.getParameter(name) y request.getInputStream. No puedes usar ambos.

+0

Hola cuando trato de agregar una línea String marshalledXml = IOUtils.toString (request.getInputStream()); está mostrando un mensaje de error como "El método toString() en el tipo Object no es aplicable para los argumentos (ServletInputStream)" – BKK

+0

¿Estás seguro de que tienes los IOUtils de org.apache.commons.io? Es una función admitida desde v1.0: http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString%28java.io.InputStream%29 –

+0

Agregando un archivo jar que puedo escribir String marshalledXml = org.apache.commons.io.IOUtils.toString (request.getInputStream()); pero esto está afectando a mi analizador DOM. pero en ninguna parte estoy usando esta línea en mi analizador DOM. Es esta la única forma de convertir httpServletRequest a String. ¿Hay alguna otra manera? – BKK

1
String httpServletRequestToString(HttpServletRequest request) throws Exception { 

    ServletInputStream mServletInputStream = request.getInputStream(); 
    byte[] httpInData = new byte[request.getContentLength()]; 
    int retVal = -1; 
    StringBuilder stringBuilder = new StringBuilder(); 

    while ((retVal = mServletInputStream.read(httpInData)) != -1) { 
     for (int i = 0; i < retVal; i++) { 
      stringBuilder.append(Character.toString((char) httpInData[i])); 
     } 
    } 

    return stringBuilder.toString(); 
} 
Cuestiones relacionadas