0

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);
}
4

1 に答える 1

0

バイナリ バイトを単純に ZIP ファイルから HTTP 要求にパイプすることはできません。それを UUENCODing し、メソッドが POST であることを確認して、リクエスト URL の末尾に追加されないようにすることを検討してください。良い例を次に示します。

http://wiki.developerforce.com/page/JavaClientExample.java

于 2012-11-13T19:54:18.230 に答える