Jettyを使用して、サーバーアプリケーションからクライアントアプリケーションにデータを送信しています。これもJettyを使用しています。
何らかの理由でメッセージの内容が設定されると、応答は常にHttpExchange.STATUS_EXCEPTEDになります。ただし、メッセージはもう一方の端で受信されており、すべてが無傷のようです。
これは、リクエストを作成して送信するサーバーアプリケーションのコードです。
HttpClient client = new HttpClient();
try
{
client.start();
ContentExchange exchange = new ContentExchange(true);
//exchange.setMethod("POST");
// Set the request URL
logger.info("1");
exchange.setURL("http://localhost:8180/network/");
// Set the data contents type.
logger.info("2");
//exchange.setRequestContentType("application/zip");
// Create a file input stream
logger.info("3");
FileInputStream inputFile = new FileInputStream(new File("ECF43d01.zip"));
// Stream the file into the request
logger.info("4");
exchange.setRequestContentSource(inputFile); // <- This line makes the response always STATUS_EXCEPTED
// Send the request
logger.info("5");
client.send(exchange);
//logger.info(baseRequest.getMethod());
// Waits until the exchange is terminated
int exchangeState = exchange.waitForDone();
if (exchangeState == HttpExchange.STATUS_COMPLETED)
response.getWriter().println("Completed "+exchange.getResponseContent());
else if (exchangeState == HttpExchange.STATUS_EXCEPTED)
response.getWriter().println("Error with handler HttpExchange.STATUS_EXCEPTED");
else if (exchangeState == HttpExchange.STATUS_EXPIRED)
response.getWriter().println("Timeout");
これは、クライアントの受信コードです。
public void handle(String target, Request baseRequest, HttpServletRequest arg2, HttpServletResponse response) throws IOException, ServletException
{
Logger logger = LoggerFactory.getLogger(AbstractHandler.class);
logger.info("Starting");
response.setContentType("text/html;charset=utf-8");
logger.info("Output");
// We have handled the request. Send back a successful response
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
}