webservice技术--服务器端
1.webservice实现单点登录具体逻辑为
①软通web端作为客户端,请求wi社区后台,进行登录请求
②wi社区后台验证t,核实无误后,走登录逻辑,直接进入欢迎页
③如果有错误,封装错误xml,返回给软通web端
2.wi社区后台实际上是要添加webservice服务端的代码
3.wi社区实际上也会写作为客户端的代码
这是由于我在自测的时候,需要模拟软通web端的客户端进行request的xml格式数据的请求,所以,实际自测的逻辑为:通过软通提供的接口测试工具生成请求xml—在wi社区后台项目的test类中发送这些xml请求—wi社区后台作为服务器进行相应的逻辑响应
4.作为服务器端首先需要编译一个最原始的初类
这个初始类其实就是一个入口,代码可以不写,只要有一个方法就可以了,生成服务器端代码后,可以重写这部分的代码,我的初始类的代码如下
package com.ht.ilcom.webservice;
public class HtWebService {
public void execute(String requestXML){
}
}
编译命令:
javac HtWebService.java
5.生成wsdl命令
%AXIS2_HOME%\bin\java2wsdl -cp . -cn com.ht.ilcom.webservice.HtWebService -of HtWebService.wsdl
(根据自己的目录改吧)
6.实际上我们需要通过一个wsdl生成服务器端的代码
①webservice服务器端代码最早是手工写的,需要对这方面的技术非常的了解,并且很容易出错。而现在因为有许多的框架技术,所以我们可以通过上面生成的wsdl文件,然后选择一门框架技术,直接生成webservice技术的代码,省去了学习底层webservice技术的时间,直接写自己的业务逻辑就可以了。(这是时好时坏呢,呵呵)
②因为我们这里使用的是axis2的技术,Apache官方提供了几种框架技术
axis2生成服务端代码有4中方式,包括Deploying POJOs、Building the service using AXIOM、Generating the service using ADB、Generating the service using XMLBeans、Generating the service using JiBX
这里使用的是ADB因为中国码友说好,时间有限,我们大多数时候要选择相信。
命令如下
%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\HtWebService.wsdl -p com.ht.ilcom.webservice.adb -d adb -s -ss -sd -ssi -o build\service
bulid文件夹下的service就是我们刚刚生成的代码了
我们的逻辑要写入HtWebServiceSkeleton.java这个类中
注:写完逻辑后,在执行9的ant构建命令
7.这里补充说一下webservice的一些基础配置
①首先jdk是肯定要有的,最低版本1.5,并且配置好环境变量
②下载axis2项目,解压到目标文件
③你也可以下载axis2.war 放到你的项目引擎(如tomcat的webapp下)解压出项目
④设置axis2的环境变量AXIS2_HOME,这部很重要,很多命令都是基于这个的,不要忽略此步骤
⑤完成这几步后,我们才应该执行刚才的逻辑 初类–编译为class文件—通过java2wsdl生成wsdl文件—然后通过wsdl2java生成webservice服务器端的代码
8.生成代码后,需要写入自己的逻辑了
①写自己的逻辑,需要注意你所引用的所有类(要么是jar要么是项目中原来有的service),如果是jar中的东西,我们可以把用到的jar包拷贝到axis2的项目中的lib中,因为下一步使用ant的时候,会自己扫描lib中用到的jar包
②如果需要用到项目中别的service的方法,最好在webservice包中单独写一份。
9.我们需要通过ant构建一个aar文件
①首先理解这个原理
*首先是Java的编译和运行机制,从.java编译为.class的过程中,javac会默认按照编译所在操作系统的默认编码读取源代码,并编译成内部为UTF-8编码的.class,而在java虚拟机执行的过程中,会按照程序运行所在操作系统的默认编码,将UTF-8编码再次进行转换。通过这种两次转换的方式,Java实现了对多语言的支持。***
②解决方法
<javac encoding="utf-8" destdir="${compile.dir}" debug="on">
.......
</javac>
在ant的build.xml中使用到javac的地方加上这么一句encoding="utf-8"就可以了
③执行命令成功以后,我们得到目录build/service/build/lib中的HtWebServiceService.aar 文件,是最终文件
我们只需将HtWebServiceService.aar文件拷贝到项目的services文件夹中,如图
最后一步,修改service.list文件,如下图
验证
查看服务列表
http://localhost:8080/axis2/services/listServices
查看wsdl文件
http://localhost:8080/axis2/services/StockQuoteService?wsdl
查看xsd文件
http://localhost:8080/axis2/services/StockQuoteService?xsd
###其他记录###
①新建的表member_info、ec_info、order_info、client_ctid
②实际上,我没有用到初类,因为软通那边给我了一个他们生成好的wsdl文件,所需要的方法已经声明完成,我直接使用这个wsdl,通过wsdl2java生成了服务器的代码。
webservice技术--服务器端的更多相关文章
- Java--详解WebService技术
Java--详解WebService技术 一.什么是 webservice WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用jav ...
- Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口
WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...
- webservice 技术改进
Webservice 技术改进 1.不同系统不同语言之间的交互 基于http协议进行传输,使用REST服务实现WS 2.不同系统相同语言之间的交互 使用RPC(romate process call) ...
- WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)
还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...
- WebService技术(一)
前言:学习笔记,以供参考 1.认识 WebService就是一种跨编程语言和跨操作系统平台的远程调用技术. Webservice就是一个独立运行的应用程序,提供了可以进行远程调用的API接口. Web ...
- WebService技术简介
今天继续阅读<.Net 大局观>时看到一段关于WebService支持技术的论述,真是简明扼要: Web services的另一个重要应用是B2B整合,一般来说它也依赖Internet,将 ...
- WebService技术规则
1.基于web的系统级接口规范 - 一个普通适用标准 :http+xml - 任何网络通信的操作系统 - 自包含.自描述.模块化 - 发布.定位.通过web调用 2. ...
- WebService技术(二)— CXF
前言:学习笔记,以供参考 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services .可以与Spring进行快速无 ...
- 利用Ajax+MSMQ(消息队列)+WebService实现服务器端向客户端的信息推送
需求: 每当数据库有数据更新时,推送到客户端 软需求: 1.服务器资源有限,要求资源占用尽可能小: 2.项目可控,不许调用第三方不可信不稳定的方法. 已有事例: 1.58到家采用的方法是TCP的长连接 ...
随机推荐
- 最短路(sp
#include<stdio.h> #include<iostream> #include<queue> using namespace std; #define ...
- java锁分析
import java.util.concurrent.TimeUnit; class Phone//Phone.java ---> Phone.class Class.forName(); { ...
- axios 基本运用
axios是专门对ajax请求进行封装的一个插件,其返回一个promise对象,用法跟ES6的promise很相似 一.安装axios插件npm install axios 二.引入axios插件 在 ...
- mysql sql时间戳格式化语句
FROM_UNIXTIME(c.lastUpdateTime/1000,'%Y-%c-%d %h:%i:%s' ) as updatetime; select c.roleid, r.username ...
- 两个table合并
1.两个一样的table合并用Merge函数即可合并(但要求table要有主键id) DataTable1.Merge(DataTable2); 2.没写完,以后继续补充(只有经过笔者验证,能用的才会 ...
- linux下svn 客户端使用方式
输入 yes 开始 checkout服务器上的文件到本地目录 2.将文件 添加文件到某个目录下(是svn的服务器checkout下来的目录中) 3. 提交到服务器 4 .即可在服务器目录看到(wind ...
- struts使用
下载文件 <action name="download" class="thirdIssueAction" method="getDownloa ...
- 天才ACM
天才ACM 给定一个整数m,定义一个集合的权值为从这个集合中任意选出m对数(不够没关系,选到尽可能选,凑不成对的舍去),每对数两个数的差的平方的和的最大值. 现在给出一个数列\(\{a_i\}\),询 ...
- ETL工具-Kattle:初识kattle
ETL是EXTRACT(抽取).TRANSFORM(转换).LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块.当前知道的 ...
- 解决Delphi 2010启动时卡死并报displayNotification堆栈溢出错误
1. 清理IE的历史记录,删除浏览器缓存(不需要清cookie) 2. 禁用startpage 2.1 从 Delphi 2010 启动菜单上点右键 -> 查看属性->快捷方式->目 ...