bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍

简介: bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍。 1.概述 bboss提供cxf webservice(基于cxf 2.7.6),hessian(基于4.0.7),http(基于bboss mvc)三种服务的一次性便捷发布机制。
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍。

1.概述
bboss提供cxf webservice(基于cxf 2.7.6),hessian(基于4.0.7),http(基于bboss mvc)三种服务的一次性便捷发布机制。

2.服务定义
在bboss ioc配置文件中将组件同时配置为webservice、hessian、http三种服务:
<properties>
	<!-- 生成令牌控制配置文件
	author:biaoping.yin
    CopyRight:bboss
    Date:2011.4.13
	-->
	<property name="/token/*.freepage" ws:servicePort="tokenService" 
	hessian:servicePort="tokenService"
	class="com.demo.common.action.TokenController" />
</properties>

从配置中可以知道:
com.demo.common.action.TokenController是服务组件实现类,首先通过name="/token/*.freepage" 将其配置为一个mvc控制器,以便接受http请求方式的服务调用,通过ws:servicePort="tokenService" 将其发布为一个cxf webservice服务,通过hessian:servicePort="tokenService"将其发布为一个hessian服务。hessian:servicePort是可选的配置,bboss 默认将所有的组件都发布为hessian服务,默认采用name属性作为hessian服务的唯一标识,无需额外配置,这里指定hessian:servicePort是由于name属性对应的值/token/*.freepage作为mvc请求的地址匹配模式,也可以作为hessian服务的标识,但是作为hessian服务的位置地址标识不太友好,所以通过hessian:servicePort指定了hessian的标识为tokenService。
3.服务接口定义
为了让TokenController正确地发布为webservice和hessian服务,还必须定义一个接口TokenService:
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(name = "TokenService", targetNamespace = "com.demo.common.action.TokenService")
public interface TokenService {
	public @WebResult(name = "authTempToken", partName = "partAuthTempToken")
	String genAuthTempToken(
			@WebParam(name = "appid", partName = "partAppid") String appid,
			@WebParam(name = "secret", partName = "partSecret") String secret,
			@WebParam(name = "account", partName = "partAccount") String account)
			throws Exception;

	public @WebResult(name = "dualToken", partName = "partDualToken")
	String genDualToken(
			@WebParam(name = "appid", partName = "partAppid") String appid,
			@WebParam(name = "secret", partName = "partSecret") String secret,
			@WebParam(name = "account", partName = "partAccount") String account)
			throws Exception;

	public @WebResult(name = "publicKey", partName = "partPublicKey")
	String getPublicKey(
			@WebParam(name = "appid", partName = "partAppid") String appid,
			@WebParam(name = "secret", partName = "partSecret") String secret)
			throws Exception;
	public @WebResult(name = "tempToken", partName = "partTempToken") String genTempToken() throws Exception;
}


接口方法和接口上添加了webservice服务相关的注解,要实现接口的服务组件:
@WebService(name="TokenService",targetNamespace="com.demo.common.action.TokenService")
public class TokenController implements TokenService {
	/**
	 * 获取令牌请求
	 * @param request
	 * @return
	 */
	public @ResponseBody String getToken(HttpServletRequest request)
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			return  memTokenManager.buildDToken(request);
		}
		else
		{
			return null;
		}
	}
	
	public @ResponseBody String genTempToken() throws Exception
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			return  memTokenManager.genTempToken();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * 获取令牌请求
	 * @param request
	 * @return
	 * @throws Exception 
	 */
	public @ResponseBody String genAuthTempToken(String appid,String secret,String account) throws Exception
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			return  memTokenManager.genAuthTempToken(appid, secret, account);
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * 获取令牌请求
	 * @param request
	 * @return
	 * @throws Exception 
	 */
	public @ResponseBody String genDualToken(String appid,String secret,String account) throws Exception
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			long dualtime = 30l*24l*60l*60l*1000l;
			return  memTokenManager.genDualToken(appid, secret, account,dualtime);
		}
		else
		{
			return null;
		}
	}
	/**
	 * 获取应用公钥
	 * @param appid
	 * @param secret
	 * @return
	 * @throws Exception 
	 */
	public @ResponseBody String getPublicKey(String appid,String secret) throws Exception
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			return  memTokenManager.getPublicKey(appid, secret);
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * 获取令牌请求
	 * http://localhost:8081/demo/token/getParameterToken.freepage
	 * @param request
	 * @return
	 */
	public @ResponseBody String getParameterToken(HttpServletRequest request)
	{
		MemTokenManager memTokenManager = org.frameworkset.web.token.MemTokenManagerFactory.getMemTokenManagerNoexception();
		if(memTokenManager != null)//如果开启令牌机制就会存在memTokenManager对象,否则不存在
		{
			return  memTokenManager.buildParameterDToken(request);
		}
		else
		{
			return null;
		}
	}

服务方法返回参数前都有@ResponseBody 注解,这个是用来标注mvc框架将返回的String数据作为响应返回到客户端。

4.服务的三种客户端调用方法
定义好调用参数
String appid = "appid";
String secret = "xxxxxxxxxxxxxxxxxxxxxx";
String account = "yinbp";



hessian服务方式申请token(hessian提供的标准调用模式)
HessianProxyFactory factory = new HessianProxyFactory();
//String url = "http://10.25.192.142:8081/context/hessian?service=tokenService";
String url = "http://192.168.1.101:8080"+request.getContextPath()+"/hessian?service=tokenService";
TokenService tokenService = (TokenService) factory.create(TokenService.class, url);
String token = tokenService.genAuthTempToken(appid, secret, account);
//token = tokenService.genDualToken(appid, secret, account);


webservice方式申请token(cxf提供的服务调用模式)

url = "http://192.168.1.101:8080/demo/cxfservices/tokenService";
JaxWsProxyFactoryBean WSServiceClientFactory = new  JaxWsProxyFactoryBean();
WSServiceClientFactory.setAddress(url);
WSServiceClientFactory.setServiceClass(TokenService.class);
tokenService = (TokenService)WSServiceClientFactory.create();
token = tokenService.genAuthTempToken(appid, secret, account);
//token = tokenService.genDualToken(appid, secret, account);

http请求方式申请令牌
url = "http://192.168.1.101:8080/demo/token/genAuthTempToken.freepage?appid="+appid + "&secret="+secret + "&account="+account;
//url = "http://10.25.192.142:8081/demo/token/genDualToken.freepage?appid="+appid + "&secret="+secret + "&account="+account;
token = org.frameworkset.spi.remote.http.HttpReqeust.httpPostforString(url);


5.HttpReqeust组件介绍
HttpReqeust是bboss最新版本3.8.0中提供的http服务组件,专门用来执行http请求,并将处理结果返回给客户端,提供了以下主要方法:
//发送请求,参数url对应服务地址,返回String类型的响应
public static String httpPostforString(String url) throws Exception
//发送请求,参数url对应服务地址,params中存放了请求的参数对,返回String类型的响应
public static String httpPostforString(String url,Map<String, Object> params) throws Exception
//发送请求,参数url对应服务地址,参数params中存放了请求的参数对,参数files中存放了要上传到服务端的文件信息,返回String类型的响应
public static String httpPostforString(String url,Map<String, Object> params,
			Map<String, File> files) throws Exception
目录
相关文章
|
2月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
4月前
HTTP协议探究:常用方法一网打尽
总的来说,HTTP协议的命令犹如一把钥匙,解锁了互联网世界的大门。它是规则,也是工具,了解了它,就等于掌握了互联网的一把通行证。我们每天都在用,也常常无视它,但是只有深刻理解了它,才能更好地运用它。如此,我们的互联网世界旅程就会变得更加顺畅,更加有趣。
125 14
|
7月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
1103 83
|
6月前
|
JSON API Go
Golang工程组件:自定义HTTP规则的grpc-gateway选项
总的来说,grpc-gateway提供了一种简单有效的方式来为你的gRPC服务提供RESTful风格的API。通过自定义HTTP规则,你可以灵活地定义你的API的行为,以满足你的应用的需求。
147 27
|
6月前
|
XML 网络协议 网络架构
WebService SOAP1.1与SOAP1.12的HTTP POST方式调用
总的来说,SOAP1.1 和 SOAP1.2 在 HTTP POST 方式调用上的主要区别在于内容类型和 SOAPAction 头部字段。SOAP1.1 使用 "text/xml" 内容类型和必需的 SOAPAction 头部字段,而 SOAP1.2 使用 "application/soap+xml" 内容类型和可选的 "action" 参数。在选择使用哪个版本时,你需要考虑你的具体需求和环境,以及 Web 服务的支持情况。
234 25
|
11月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
780 7
|
6月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
589 5
|
7月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
7月前
|
缓存 安全 API
为什么 HTTP GET 方法不使用请求体?
本指南深入探讨了为什么HTTP GET方法通常不使用请求体,解释了GET方法的主要用途及其设计原则。GET请求旨在通过URL安全、幂等地检索数据,避免因请求体带来的复杂性和潜在问题。尽管HTTP/1.1规范允许GET请求包含请求体,但这并不常见且可能引发副作用。掌握这些原则有助于开发者在API开发中更高效地使用GET请求。
|
9月前
|
数据采集 API 定位技术
合适HTTP代理优化效率的方法与好处
随着互联网发展,使用HTTP动态代理IP的需求日益增加。选择稳定、支持隧道代理、速度快、多样性高、支持HTTPS、API集成便捷、可更换性强、并发支持好且IP池大的代理IP,能有效提升爬虫效率和成功率。掌握这些实用技巧,有助于更好地利用代理IP进行数据采集。
207 10