Spring HttpInvoker 是 spring 框架中的一个远程调用模型,执行基于 HTTP 的远程调用,并使用 java 的序列化机制在网络间传递对象,客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象。
HttpInvoker 服务模式
服务器端配置
1、创建服务接口
package cn.gtmap.approval.service.interf;
import java.util.Map;
public interface ApprovalService {
/**
* 获取勘测定界相关信息
* {"wlydMj":5521,"gdMj":35894,"nydMj":47141,"jsydMj":0}
* @param proid 工作流id
* @return
*/
Map<String, Object> getKcdjInfo(String proid) throws Exception;
}
2、创建服务接口实现类
package cn.gtmap.approval.service.impl;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import cn.gtmap.approval.service.interf.ApprovalService;
@Service
public class ApprovalServiceImpl implements ApprovalService {
@Override
public Map<String, Object> getKcdjInfo(String proid) throws Exception {
if (StringUtils.isNotBlank(proid)) {
Map<String, Object> map = new HashMap<String, Object>(6);
map.put("nydMj", 1);
map.put("gdMj", 2);
map.put("jsydMj", 3);
map.put("wlydMj", 4);
return map;
}
return null;
}
}
3、公开服务
app-config.xml
<bean id="approvalServiceImpl" class="cn.gtmap.approval.service.impl.ApprovalServiceImpl"/>
<bean name="approvalService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="approvalServiceImpl"/>
<property name="serviceInterface" value="cn.gtmap.approval.service.interf.ApprovalService"/>
</bean>
注: HttpInvokerServiceExporter 实际上是一个spring mvc 控制器,它处理客户端的请求并调用服务实现。
需要为其提供spring URL 处理器,如下:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/approvalService">approvalService</prop>
</props>
</property>
</bean>
4、添加 SpringSecurity过滤
<security:intercept-url pattern="/approvalService/**" filters="none"/>
最终服务地址为:
http://ip:port/web工程/approvalService
客户端配置
1、将服务器短的ApprovalService接口类直接拷贝到客户端
2、配置访问服务
<bean id="ApprovalService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="${approval.url}/approvalService"/>
<property name="serviceInterface" value="cn.gtmap.approval.service.interf.ApprovalService"/>
</bean>
3、调用接口
@Resource
@Qualifier("ApprovalService")
private ApprovalService approvalService;
public String execute() throws Exception {
Map<String, Object> map = approvalService.getKcdjInfo("21AD2944GCJ7X208");
System.out.println(map);
}
Map<String, Object> map = approvalService.getKcdjInfo("21AD2944GCJ7X208");
System.out.println(map);
}