cxf+spring+数字签名开发webservice(二)
- 场景
上一章中的webservice接口,因为现场正式环境的项目与外部单位网络不通,是通过前置机与外部进行数据交换,所以我们将webservice部署在前置机,在使用HttpURLConnection与正式服务器上进行数 据传递。这里可以使用的技术挺多的,如:java的rmi,Hessian,spring的HttpInvoker等,下面是使用HttpURLConnection的代码(实际情况是最后选择了spring的HttpInvoker):
- HttpURLConnection客户端调用方法
package http.rpc.util; import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map; public class ClientUtils {
/*
* @param url 服务端url地址
* @param beanid 访问远程方法所在的类名
* @param method 调用服务端的方法名
* @param param 服务端的方法的参数
*/
public static Object remoteService(String url, String beanid, String method, String param) {
HttpURLConnection urlcon = null;
String result = null;
try {
if (param == null) {
param = "";
}
URL u = new URL(url + "/webservice.rpc"); byte[] databuffer = new byte[1024];
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
int len = 0;
try {
urlcon = (HttpURLConnection) u.openConnection();
urlcon.setDoOutput(true);
urlcon.setRequestMethod("POST");
OutputStream buf = new BufferedOutputStream(urlcon.getOutputStream());
OutputStreamWriter out = new OutputStreamWriter(buf, "UTF-8");
/* 向webservice.rpc传递3个参数 */
out.write("serverid=" + beanid + "&method=" + method + param);
out.flush();
out.close(); urlcon.connect();
if (urlcon.getResponseCode() == 200) {
InputStream in = urlcon.getInputStream();
while ((len = in.read(databuffer)) != -1) {
outStream.write(databuffer, 0, len);
}
in.close();
result = new String(outStream.toByteArray(), "utf-8");
System.out.println(result);
urlcon.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
urlcon.disconnect();
return result;
}
}
- 服务端web.xml配置(简单的servlet配置)
<servlet-mapping>
<servlet-name>testserver</servlet-name>
<url-pattern>/webservice.rpc</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>testserver</servlet-name>
<servlet-class>http.rpc.Server</servlet-class>
- 服务端http请求类
package http.rpc; import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Server extends HttpServlet{ @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost");
String serverid = req.getParameter("serverid").toString();
String method = req.getParameter("method").toString();
String methodParam = req.getParameter("param").toString();
ServletOutputStream sos = resp.getOutputStream();
String result = "远程调用返回";
sos.write(result.getBytes("utf-8"));
}
}
- 最后说说
Server类得到远程方法信息后,可以使用反射去调用具体方法。返回的数据如果是对象类型,可以实现序列化和反序列化进行数据传递。因为使用spring的HttpInvoker,就没写得很完善,这里只是做个记录,有时间再完善吧。
cxf+spring+数字签名开发webservice(二)的更多相关文章
- cxf+spring+数字签名开发webservice(一)
数字证书的准备 下面做的服务端和客户端证书在例子中无法加解密,不知道什么原因,我是使用正式环境中的客户端和服务端进行开发测试的,所以需要大家自己去准备证书,或者有人知道为什么jdk生成 ...
- cxf + spring + maven 开发webservice
1.maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- 解决cxf+spring发布的webservice,types,portType和message以import方式导入
用cxf+spring发布了webservice,发现生成的wsdl的types,message和portType都以import的方式导入的.. 原因:命名空间问题 我想要生成的wsdl在同个文件中 ...
- Spring Boot用Cxf的jax-ws开发WebService
首先上项目的pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...
- Spring Boot 开发 WebService 服务
WebService 虽然现在大部分互联网企业不太提倡使用,但在以第三方接口为主导的市场,对方来什么接口你还得用什么接口,不可能把接口重写了.例如大部分传统的大型企业都在用 WebService,并且 ...
- CXF和Axis2开发webservice也是可以添加asmx等后缀
在当家互联网时代, 手机APP所需要的后台服务接口经常会变化, 如果前期没有设计好, 把它们的请求地址配置在比较稳定不会经常修改的地址(例如专门一个后台服务用于获取所有最新的数据服务地址)这样不会因为 ...
- CXF+Spring 搭建的WebService
1.创建类 2.接口编写 package com.fan; import javax.jws.WebService; @WebService public interface IHelloWorld ...
- Spring boot 开发WebService遇到的问题之一
当pom.xml文件中的配置: <artifactId>spring-boot-starter-parent</artifactId><version>2.0.6. ...
- 使用cxf开发webservice接口
项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...
随机推荐
- openssh升级至7.2
此处升级操作的原则是保留系统原有ssh服务,新安装高版本ssh服务 1.下载openssh源码包 http://www.openssh.com/portable.html 2.安装#tar zxvf ...
- koa2+koa-views示例
app.js var Koa = require('koa') var fs = require('fs') var path = require('path') var koaStaticPlus ...
- Using Redis to store php session
Using Redis to store php session 默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景 ...
- Redis从基础命令到实战之散列类型(Hash)
从上一篇的实例中可以看出,用字符串类型存储对象有一些不足,在存储/读取时需要进行序列化/反序列化,即时只想修改一项内容,如价格,也必须修改整个键值.不仅增大开发的复杂度,也增加了不必要的性能开销. 一 ...
- 过滤表名 & 拼接字符串
/// <summary> /// 分析sql语句中的表名 /// </summary> /// <param name="sql">sql语句 ...
- hdu4607 Park Visit(树的直径)
Park Visit Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- java.lang.IllegalStateException: Couldn't read row 1, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data fr
Android中操作Sqlite遇到的错误:java.lang.IllegalStateException: Couldn't read row 1, col 0 from CursorWindow. ...
- jquery 获取form下的所有元素
<!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title> ...
- web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入
web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本 ...
- Spring - constructor-arg和property
1.说明 constructor-arg:通过构造函数注入. property:通过setter对应的方法注入. 2.constructor-arg的使用示例 (1).Model代码: 1 2 ...