вернуть объект, используя ObjectOutputStream - PullRequest
2 голосов
/ 18 мая 2011

Я обнаружил сегмент кода Java, который, как утверждается, возвращает объект с использованием ObjectOutputStream

     OutputStream outstr = response.getOutputStream();
     ObjectOutputStream oos = new ObjectOutputStream(outstr);

     oos.writeObject(process);

     oos.flush();
     oos.close();

Ответ - это объект HttpServletResponse.Я хотел бы знать, как работает этот сегмент кода и как его протестировать?

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Ниже приведен простой пример, который показывает, как читать сериализованный объект через HTTP.

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.ObjectInputStream;

/**
 * This is a simple example to read an object. 
 *
 * This is not production ready code ;-)
 */
public class Sample {

    public static void main(final String [] pArgs) throws Exception {

        // Change SERVER:PORT/PATH to match your application.
        final URL url = new URL("http://SERVER:PORT/PATH");
        final HttpURLConnection conn = (HttpURLConnection)url.openConnection();

        conn.setRequestMethod("GET");
        conn.setReadTimeout(10000);
        conn.connect();

        final ObjectInputStream is 
        = new ObjectInputStream(conn.getInputStream());

        final Object obj = is.readObject();

        if (obj instanceof String) System.out.println((String)obj);
        else // Convert to object and do whatever.

        is.close();
        conn.disconnect();
    }
}
1 голос
/ 18 мая 2011

Он сериализует объект в выходной поток сервлета (например, данные, которые будут переданы в ответе HTTP), используя стандартный двоичный протокол сериализации Java (который я лично не очень хочу использовать). Подробности см. В спецификации сериализации объекта .

Что касается того, как его протестировать - это зависит от уровня тестирования, которое вы хотите использовать. Вы можете использовать поддельную библиотеку HTTP-сервлетов, получить ответ и затем попытаться прочитать его снова с ObjectInputStream, или вы можете запустить реальный контейнер сервлета, сделать HTTP-запрос и затем попытаться десериализовать ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...