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是一种跨平台, ...
随机推荐
- Res_Orders_01
一.燃尽图展示 二.项目进展 1.讨论选题内容 2.确定项目的版本(Web版) 3.讨论能达到的效果和内容 4.确定编程方面的难点 5.开始制作大概的框架 三.遇到问题 1.不知道怎么部署能达到最好的 ...
- ftp
1.url的确定 string ftpServerIP = "29.184.249.98"; string path=new Uri("ftp://"+ftpS ...
- Java入门记(五):容器关系的梳理(下)——Map
注意:阅读本文及相关源码时,需要数据结构相关知识,包括:哈希表.链表.红黑树. Map是将键(key)映射到值(value)的对象.不同的映射不能包含相同的键:每个键最多只能映射到一个值.下图是常见M ...
- Samba安装配置
Samba简介 Samba官网:http://www.samba.orgSMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不 ...
- 简单的androidStudio 添加Jar包
感谢http://blog.csdn.net/ta893115871/article/details/46955791博主的文章, 1新建一个空项目 2在项目下添加一个新的moudle 3在该moud ...
- [题解]noip2016普及组题解和心得
[前言] 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. 第一题可以说的内 ...
- 【译】RabbitMQ:远程过程调用(RPC)
在教程二中,我们学习了如何使用工作队列在多个工作线程中分发耗时的任务.但如果我们需要去执行远程机器上的方法并且等待结果会怎么样呢?那又是另外一回事了.这种模式通常被称为远程过程调用(RPC). 本教程 ...
- The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name
可以强迫部署EntityFramework.SqlServer.dll这个文件到输出目录 找到1个老外的帖子,戳这里(本人测试无效,大家有可能试一下..) 解决方案以下: 在EF的上下文代码CS文件( ...
- windows10, 安装wamp无法启动服务的问题
今天在另一台电脑上安装了wamp, 就是这个玩意 结果怎么也启动不起来, 上网上查了一下, 原因是有些windows10的系统上有安装IIS10, 这个也不知道是啥东西, 占用了80端口, 所以启动不 ...
- sqlserver索引与查询优化
此文为转载,仅做保存使用,出处:http://www.cr173.com/html/8688_all.html 在数据库存优化设计中往往会提到索引,这编文章就来详细的说明一下在 SQL SERVER ...