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是一种跨平台, ...
随机推荐
- thinkPHP-空操作
空操作 当访问的方法不存在时,可以定义一个empty方法来避免空操作 function _empty() { echo "网页不存在,请检查地址信息"; } 这样当访问不存在的方法 ...
- Python发送邮件(支持中文)
# -*- coding: utf-8 -*- from email.header import Header from email.mime.text import MIMEText import ...
- Mac下Call to undefined function imagettftext() 解决方案
文章转载至Mac下Call to undefined function imagettftext()终极解决方案 安装了一套onethink程序准备调试,结果在登录页面发现验证码无法显示,单独访问验证 ...
- 使用JDBC访问SQLServer 2008
使用JDBC访问SQLServer 2008 // 准备数据库驱动程序 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriv ...
- Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)
One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...
- Elasticsearch升级1.5版本暴露jdk的bug
把测试环境的Elasticsearch升级到1.5.1版本,启动的时候报错: [root@node2 elasticsearch-1.5.1]# bin/service/elasticsearch s ...
- VC++ 判断文件或文件夹是否存在的快捷方法 _access
_access函数 int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); ...
- Java内部类,枚举
模式: 模板模式: 简单工厂模式: 适配器模式: interface ICellPhone { void sendMsg(); } class Android implements ICel ...
- 团队编程——web应用之人事管理系统
本次作业为团队作业,团队博客要求如下:1. 介绍团队情况:包括队长.成员.队名.成员照片.队训--.等:2. 介绍团队项目名称.总体任务,各成员任务等:3. 每个队做 一次需求调研(针对团队项目),要 ...
- Sharif University CTF 2016 -- Login to System (PWN 200)
EN: It's easy to find out where is the bug : .text:0000000000400DE4 ; void *start_routine(void *).te ...