spring+hessian 根据接口和代理对象来发布服务

阅读:358
作者:majingjing
发布:2016-07-12 10:33:11

1. 实际上hessian发布服务是根据接口来发布的,但是接口必须要有对应的实例对象才可以完成服务的暴露

2. hessian在和spring集成的时候,spring做了过多的检查校验

比如: org.springframework.remoting.support.RemoteExporter  (spring-context-3.1.1.RELEASE.jar)


protected void checkServiceInterface() throws IllegalArgumentException {
		Class serviceInterface = getServiceInterface();
		Object service = getService();
		if (serviceInterface == null) {
			throw new IllegalArgumentException("Property 'serviceInterface' is required");
		}
		if (service instanceof String) {
			throw new IllegalArgumentException("Service [" + service + "] is a String " +
					"rather than an actual service reference: Have you accidentally specified " +
					"the service bean name as value instead of as reference?");
		}
		/**
		 //以下部分是严格校验,服务对象必须是接口的实例,导致无法将代理对象绑定的接口上发布服务。 
		if (!serviceInterface.isInstance(service)) {
			throw new IllegalArgumentException("Service interface [" + serviceInterface.getName() +
					"] needs to be implemented by service [" + service + "] of class [" +
					service.getClass().getName() + "]");
		}*/
	}

20160713085920.png

上面解释和代码是我注释掉的,去掉检查校验,就可以完成接口+代理对象来完成服务的发布。

具体代码见附件: RemoteExporter.java