Я читаю и запись XML по соединению TCP (не HTTP) как часть веб-сервиса, который я разрабатываю, и я задавался вопросом, существует ли больше "springified" пути (или даже другие идеи) достижения, что я пробую ниже:
InputStream is = null;
OutputStream os = null;
Socket s = null;
try {
s = new Socket(address, portNo);
os = s.getOutputStream();
os.write(msg.getBytes());
os.flush();
is = s.getInputStream();
String xml = IOUtils.toString(is);
return xml;
} finally {
IOUtils.closeQuietly(os);
IOUtils.closeQuietly(is);
if (s != null) s.close();
}
Отметьте, у меня нет управления сервером, таким образом, я не думаю, что смогу использовать дистанционную работу Spring, но задавался вопросом, может ли это быть улучшено сродни JdbcTemplates пружины.
Править:
Отметьте, просто для уточнения IOUtils является свободным-городским-населением-io Apache...
Взгляните на Webservicetemplate . Это основная пружина абстракции обеспечивает доступ к клиентскому веб-сервису. Несмотря на то, что ваш сервер не является типичным веб-службой, пока он использует тот же шаблон запроса-ответ, вы все равно можете использовать это в качестве основы для вашего решения. Класс предоставляет крючки для каждой части связи (Marshalling, отправка запроса, получение ответа, неуместности и т. Д.). JavadoC перечисляет все шаги, необходимые для выполнения звонков веб-сервисов, и вы можете отключить все что угодно. Так, например, вы можете использовать встроенный Marshalling Support, но переопределить CreateConnection
для создания пользовательского подключения TCP.
«Весенний подход» применяется здесь не к тому, как вы делаете коммуникации сокетов TCP, но как классы, которые совместно с этим классом взаимодействуют с ним.
Итак, я думаю, что «весенний подход» будет скрывать любой сокет связи позади сообщений
(ужасное имя, я знаю) интерфейс, так что классы сотрудников должны иметь дело только с Сообщения
И оставайся слепым к тому, что любой вид коммуникации низкоуровневого сокета продолжается для достижения отправки этого сообщения.
У меня установлено load.on.activate = 1
в моем sciteuser.properties, которые работают как очарование.
Редактировать:
Используйте его в сочетании с Save.on.deactivate = 1
и Reload.preserves.undo = 1
. knedocs расскажет вам больше.
Большинство пружинных технологий основаны на стандартных подходах к тому, чтобы делать вещи. TCP / IP ниже уровня, чем большинство приложений, необходимых для решения сегодня. Я не могу вспомнить, в последний раз я написал линию кода, которая напрямую использовала библиотеку сокетов. Вместо этого, как правило, что делается, это создать на вершине протокола более высокого уровня.
Использование HTTP или RMI в качестве отправной точки сэкономит много хлопот на уровне сокета. Есть тонны хороших библиотек веб-сервисов для абстрактных деталей сокета от пользователя. Я бы порекомендовал использовать JAX-WS . Весна имеет реализацию JAX-WS в своем проекте Spring-WS. Apache CXF также позволяет конфигурацию веб-сервисов через пружину.
RMI также вариант. Возможность отказа от протокола RMI протокол от вашего кода, позволяющего сосредоточиться на функциональности. Он не дает вам доступа к сокетам, но это, вероятно, не то, что вы хотите сделать в любом случае.