Java RESTサービスからMicrosoft Excelファイルを返す必要があります。私はJAX-RSの実装としてApache Winkを本質的に使用するWebSphere 8.5を使用しています。それは私が変更できない要件です。私はJava 7 JDKも使用しています。ここで私が受けてるのエラーは次のとおりです。Apache Winkを使用してJava RESTサービス経由でExcel文書を返す
のhandleResponseシステムが javax.ws.rs.ext.MessageBodyWriterまたはDataSourceProviderクラスを見つけることができませんでしたorg.apache.wink.server.internal.handlers.FlushResultHandler の場合はcom.somewhere.else.message.core.BaseResponseMessageタイプ、 の場合はapplication/vnd.ms-excel mediaTypeです。 JAX-RSアプリケーションの javax.ws.rs.ext.MessageBodyWriterが の型とメディアタイプが指定されていることを確認してください。
は、ここに私のJavaリソースのクラスメソッドである:
@GET
@Path("/report")
@Produces("application/vnd.ms-excel")
public Response getReport() {
int fileSize = 0;
byte[] reportByteArray = null;
ResponseBuilder responseBuilder = null;
InputStream report = null;
BaseResponseMessage<InputStream> baseResponseMessage = new
BaseResponseMessage<InputStream>();
Path reportPath = null;
String localPath = "C:/Users/me/Report.xls";
responseBuilder = Response.ok(baseResponseMessage);
responseBuilder.header("Content-Description", "File Transfer");
responseBuilder.header("Content-Disposition", "attachment;
filename=Report.xls");
responseBuilder.header("Content-Transfer-Encoding", "binary");
responseBuilder.header("Connection", "Keep-Alive");
reportPath = Paths.get(localPath);
if (Files.exists(reportPath)) {
if (Files.isReadable(reportPath)) {
reportByteArray = Files.readAllBytes(reportPath);
report = new ByteArrayInputStream(reportByteArray);
}
}
fileSize = report.available();
responseBuilder.header("Content-Length", fileSize);
baseResponseMessage.setPayload(report);
return responseBuilder.build();
}
私はパスとExcelファイルが正しく検出されたデバッガを見てから知っていますし、ファイルサイズも同様に正しく読み込まれます。
私は喜んで必要な情報を提供します。あなたの時間をありがとう!
変更を加えるときにこれが問題ではないようです: 'org.apache.wink.server.internal.handlers.FlushResultHandler handleResponseシステムはできませんでした。 com.somewhere.else.message.core.BaseResponseMessageタイプおよびapplication/octet-streamメディアタイプのjavax.ws.rs.ext.MessageBodyWriterクラスまたはDataSourceProviderクラスを見つけます。 JAX-RSアプリケーションにjavax.ws.rs.ext.MessageBodyWriterが存在することを、指定されたタイプとメディアタイプで確認します.'おそらく、直接レスポンスではなくBaseResponseMessageで返されるレスポンスと関係がありますか? – risingTide