我正在通过TCP连接(而不是HTTP)阅读和编写XML,作为我正在开发的Web服务的一部分,我想知道是否有更多的“弹性”方式(甚至其他想法)实现了什么我正在尝试下面:
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远程处理,但是想知道这是否可以像spring的JdbcTemplates一样进行改进。
编辑:
注意,只是为了澄清IOUtils是Apache commons-io ...
答案 0 :(得分:5)
我有类似的问题,想到使用Spring Integration,听起来非常适合我:
请注意,Spring Integration 2.0构建于Spring 3.0之上,而之前的1.0版本也支持Spring 2.x(但不包括TCP / UDP适配器)。
答案 1 :(得分:2)
“Spring方法”不适用于您如何进行TCP套接字通信,而是与此类协作的类如何与之交互。
所以我认为“Spring方法”是隐藏MessageSender
(我知道的名字)接口背后的任何类型的套接字通信,这样协作者类只需要处理{{1}并且仍然对任何类型的低级套接字通信正在实现发送该消息的事实视而不见。
答案 2 :(得分:1)
看看WebServiceTemplate。这是Spring为客户端Web服务访问提供的主要抽象。即使您的服务器不是典型的Web服务,只要它使用相同的请求 - 响应模式,您仍然可以使用它作为解决方案的基础。该类提供了几乎所有通信部分的挂钩(编组,发送请求,接收响应,解组等)。 JavaDoc列出了执行Web服务调用所需的所有步骤,您可以覆盖那里的任何内容。因此,例如,您可以使用内置的编组支持,但覆盖createConnection
以构建自定义TCP连接。
答案 3 :(得分:0)
大多数Spring技术都基于标准的处理方法。 TCP / IP的级别低于大多数应用程序今天需要处理的级别。我不记得上次我写了一行直接使用Socket库的代码。相反,通常所做的是建立在更高级别的协议之上。
使用HTTP或RMI作为起点可以在套接字级别节省大量麻烦。有许多好的Web服务库可以从用户那里抽象出套接字细节。我建议使用JAX-WS。 Spring在他们的Spring-WS项目中有一个JAX-WS实现。 Apache CXF还允许通过Spring配置Web服务。
RMI也是一种选择。 Spring的远程处理将RMI协议从代码中抽象出来,使您可以专注于功能。它不允许您访问套接字,但这可能不是您想要做的。