2012-09-04 27 views
6

Wie kann ich einen HttpServletRequest zu String konvertieren? Ich muss den HttpServletRequest entpacken, aber wenn ich versuche, löst mein Programm eine Ausnahme aus.Wie konvertiert man einen HttpServletRequest in 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) 

Ich habe versucht, den folgenden Code die HttpServletRequest entordnen.

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

Mein Parser-Methode:

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

Möchten Sie die Anfrage, einen bestimmten HTTP-Header, den Körper, ...? –

+0

Hallo ich möchte die HttpServlet Anfrage in String konvertieren. – BKK

+0

Bitte fügen Sie ein Beispiel hinzu, wie solch ein String aussehen könnte. –

Antwort

4

Ich habe den Eindruck, Sie versuchen, aus dem Eingangsstrom zu lesen, nachdem Sie die Anfrage bearbeitet haben und reagierte auf Ihre Kunden. Wo hast du deinen Code abgelegt?

Wenn Sie die Anfrage zuerst bearbeiten und später das Unmarshalling durchführen möchten, müssen Sie den Eingabestream zuerst in einen String einlesen. Dies funktioniert gut, wenn es sich um kleine Anfragen handelt, die Sie bearbeiten.

Ich schlage vor, etwas wie Apache commons IOUtils zu verwenden, um dies für Sie zu tun.

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

Denken Sie auch daran, dass Sie zwischen request.getParameter(name) und request.getInputStream zur Auswahl. Sie können nicht beide verwenden.

+0

Hi, wenn ich versuche, eine Zeile hinzuzufügen String marshalledXml = IOUtils.toString (request.getInputStream()); Es zeigt eine Fehlermeldung wie "Die Methode toString() im Typ Objekt ist nicht anwendbar für die Argumente (ServletInputStream)" – BKK

+0

Sind Sie sicher, dass Sie die IOUtils von org.apache.commons.io haben? Es ist eine unterstützte Funktion seit v1.0: http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString%28java.io.InputStream%29 –

+0

Durch Hinzufügen von a Jar-Datei kann ich schreiben String marshalledXml = org.apache.commons.io.IOUtils.toString (request.getInputStream()); aber das betrifft meinen DOM-Parser. aber nirgendwo verwende ich diese Zeile in meinem DOM-Parser. Ist dies die einzige Möglichkeit, httpServletRequest in String zu konvertieren? Gibt es einen anderen Weg? – 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(); 
} 
Verwandte Themen