2012-09-04 12 views
6

HttpServletRequestStringに変換するにはどうすればよいですか? HttpServletRequestをアンマーシャリングする必要がありますが、試してみるとプログラムが例外をスローします。HttpServletRequestを文字列に変換するには?

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) 

HttpServletRequestをアンマーシャリングするために次のコードを試しました。

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

私のパーサ方法:

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

リクエスト、特定のHTTPヘッダー、本文などが必要ですか。 –

+0

こんにちは、私は、HttpServlet要求を文字列に変換したいです。 – BKK

+0

このようなStringの外観の例を追加してください。 –

答えて

4

私はあなたが要求を処理し、あなたのクライアントに対応した後、入力ストリームから読み取るしようとしている印象を持っています。あなたのコードはどこに入れましたか?

最初に要求を処理し、後でアンマーシャリングする場合は、まず入力ストリームを文字列に読み込む必要があります。あなたが処理している小さなリクエストの場合、これはうまく動作します。

これを行うには、apache commons IOUtilsのようなものを使用することをお勧めします。

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

また、あなたがrequest.getParameter(name)request.getInputStreamの間で選択する必要があることに留意してください。両方を使うことはできません。

+0

こんにちは、私は行を追加しようとしていますString marshalledXml = IOUtils.toString(request.getInputStream()); 「Object型のtoString()メソッドが引数(ServletInputStream)に適用されません」というエラーメッセージを表示しています – BKK

+0

org.apache.commons.ioのIOUtilsを持っていますか? v1.0以来サポートされている機能です:http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString%28java.io.InputStream%29 –

+0

jarファイル私は文字列を書くことができますmarshalledXml = org.apache.commons.io.IOUtils.toString(request.getInputStream());これは私のDOMパーサーに影響を与えています。私のDOMパーサーではこの行を使用していません。これはhttpServletRequestをStringに変換する唯一の方法ですか?他の方法はありますか? – 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(); 
} 
関連する問題