MTOMストリーミングWebサービスを開発していますが、次の問題が発生しました。Webサービス実装クラスに次のコードがあります。
@Override
public void fileUpload(String name, DataHandler data)
{
System.out.println("INVOKING FILE UPLOAD!");
try
{
StreamingDataHandler dh = (StreamingDataHandler) data;
File file = File.createTempFile("result.txt", "");
dh.moveTo(file);
dh.close();
System.out.println("TEMP FILE WITH DATA: " + file.getAbsolutePath());
}
catch(Exception e)
{
throw new WebServiceException(e);
}
}
問題は、Eclipseが次の方法でStreamingDataHandlerをインポートするように要求することです(コンパイルおよびデプロイ-ok):
import com.sun.xml.internal.ws.developer.StreamingDataHandler;
ただし、実行時にClassNotFoundExceptionが発生します。簡単に機能させるために何をエクスポートする必要があるか教えてください。jaxws-ri.jarとstax-ex.jar(v 2.2.7)をモジュールに含めようとしましたが、運がありませんでした(他のエラーが発生しました)。また、StreamingDataHandlerクラスはそれらの異なるパッケージの下にあります(Eclipseによってプロンプトが表示されるのと同じですが、「内部」はありません)。私のプロジェクトファセットは次のとおりです。動的Web-モジュール3.0、Java 1.7、Javascript 1.0、JBoss Webサービスコア、サーバーランタイムはJBoss7.1.1です。どうすれば混乱を解決できますか?どうも。
更新:(解決策)
次のコードを使用してデータを書き込みます。
InputStream is = data.getInputStream(); // DataHandler
File file = File.createTempFile("result.txt", "");
OutputStream os = new FileOutputStream(file.getAbsolutePath());
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1)
{
os.write(buffer, 0, bytesRead);
}
os.flush();
os.close();
2つのホスト間で5.9Gbのデータを送信しました。