0

私はテーブルのコンテンツをXMLとして出力するWebサービスに取り組んできました-これを行うためにWebRowSetを使用しました。

response.setContentType("text/xml");
WebRowSet webRowSet = new WebRowSetImpl();
webRowSet.writeXml(resultSet, response.getWriter());

(HttpServletResponse応答)

これは問題なく機能しますが、XMLにスタイルシートを適用する方法がわかりません。私はこれを行うために変圧器を使用しようとしました。

webRowSet.writeXml(resultSet, OutputStream);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource("file.xsl"));
transformer.transform(new StreamSource(InputStream), 
                      new StreamResult(response.getWriter()));

writeXmlのOutputStreamとStreamSourceのInputStreamがどうなるか理解できません。(データをファイルに保存したくない)

関連する可能性のある質問を見つけましたか?

この問題をどのように解決できるかについての説明をいただければ幸いです。

4

4 に答える 4

1

あなたが本当にやりたいことは、結果セットからいくつか/すべてのフィールドを取得し、それを既知の出力形式に書き込むことのように見えます。

出力するデータの複雑さに応じて、XSLを使用する代わりに、結果セットからJavaのCollectionオブジェクトにデータを取得し、そのデータをVelocityやFreeMarkerなどのテンプレートエンジンに渡すこともできます。

Velocity / Freemarkerテンプレートは、(多かれ少なかれ)意図した出力の形式になり、したがって保守が容易になります。

欠点として、結果セットのデータがかなり豊富な場合、データ構造が複雑になるため、データをテンプレートエンジンに渡す前に、データを表すJavaBeansを作成する必要があります。これはより多くの作業になりますが、XSLの作成と保守の労力とバランスを取る必要があります。

于 2012-08-02T10:39:05.557 に答える
0

ストリームに関する質問への簡単なメモ: コードの最後の行でわかるように、Web サーバーもストリームを使用してデータを書き込みます。

変換オブジェクトが書き込む Output-Stream は、応答ストリームです。

于 2012-08-02T09:40:46.633 に答える
0

webRowSetその XML を に書き込むことができます(バッファリングの目的でByteArrayOutputStream、 内にラップすることをお勧めします)。BufferedOutputStream

次に、から取得するでインスタンス化するTransformerから読み取るように指示できます。ByteArrayInputStreambyte[]ByteArrayOutputStream

于 2012-08-02T09:38:20.583 に答える
0

次の手順があります:
WebRowSetデータをxmlとして出力ストリームに書き込みます->何らかの方法で入力ストリームに変換します->入力ストリームをトランスフォーマーに渡し、結果を応答に書き込みます

2番目のステップはトリッキーです。達成する方法の1つは、あなたが述べたようにファイルに書き込むことです。次を使用してメモリに書き込むこともできますByteArrayOutputStream

ByteArrayOutputStream tempStream = new ByteArrayOutputStream();
webRowSet.writeXml(resulSet, tempStream);
...
transformer.transform(new StreamSource(new ByteArrayInputStream(tempStream.toByteArray())),
                      new StreamResult(response.getWriter()));

メモリに収まらない大きなxmlがない限り、機能するはずです。このようにして、ファイルに書き込むか、メモリに書き込まないソリューションを探すことができます。

于 2012-08-02T09:39:18.303 に答える