0

VBからJavaサーブレットに書き直しているWebサービスがあります。Webサービスでは、クライアント側で設定された本体エンティティを次のように抽出します。

StringEntity stringEntity = new StringEntity(xml, HTTP.UTF_8);
stringEntity.setContentType("application/xml");
httppost.setEntity(stringEntity);

VB Webサービスでは、次を使用してこのデータを取得します。

Dim objReader As System.IO.StreamReader
objReader = New System.IO.StreamReader(Request.InputStream)
Dim strXML As String = objReader.ReadToEnd

これはうまく機能します。しかし、私はJavaで同等のものを探しています。

私はこれを試しました:

ServletInputStream dataStream = req.getInputStream();
byte[] data = new byte[dataStream.toString().length()];
dataStream.read(data);

しかし、それが私を得るのは理解できない文字列だけです:

data = [B@68514fec

お知らせ下さい。

4

2 に答える 2

2

次のように、ByteArrayOutputStreamを使用する必要があります。

ServletInputStream dataStream = req.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();

int r;
byte[] buffer = new byte[1024*1024];

while ((r = dataStream.read(data, 0, buffer.length)) != -1) {
   baos.write(buffer, 0, r);
} 

baos.flush();

byte[] data = baos.toByteArray();
于 2012-11-27T15:28:40.197 に答える
0

Java配列の印刷と混同しています。Javaオブジェクトを出力すると、メソッドの暗黙的な呼び出しによって文字列表現に変換されますtoString()。配列もオブジェクトであり、そのtoString()実装はあまりユーザーフレンドリーではありません。それは、を含む文字列を作成し[、次にシンボリック型定義(あなたの場合は配列への内部参照)を作成しますBbyte

配列の内容を印刷する場合は、を使用しますArrays.toString(yourArray)。この静的メソッドは、配列のユーザーフレンドリーな文字列表現を作成します。これがあなたがここで必要とするものです。

そしてさらに別のメモ。配列を正しく読み取れません。@ Petterの答え(+1)を見てください-ストリームからすべてのバイトを読み取るためにループを実装する必要があります。

于 2012-11-27T15:36:51.307 に答える