web service 实例 axis2框架下基于rampart安全认证的
axis2 WebService 开发指南
Axis2.x WebService上次介绍了axis1.x的用法,这次继续上次的,将叙述axis2的用法。
Axis1.x在线博文:/hoojo/archive/2010/12/20/1911349.html一、准备工作1、开发准备首先需要下载axis2的相关jar包,到axis的官方网站即可获得开发的依赖包。
下载地址:/axis2/java/core/download.cgi现在最高的版本是1.5.4的然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。
下载页面:/axis2/java/core/tools/index.htmlService Archive Wizard - Eclipse Plug-inCode Generator Wizard - Eclipse Plug-in2、安装eclipse插件如果你的eclipse插件安装成功后,会看到如下效果:3、分析axis2-bin文件目录结构下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具conf是axis2的配置文件lib运行所要的依赖库repository是发布过的axis服务和文件sample是示例webapp是web文件和jsp页面等4、我们需要将下载下来的axis2-1.5.3-war.zip中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。
Tomcat启动后,在浏览器中输入:http://localhost:8080/axis2/你可以看到二、Axis2的简单WebService示例注意,上面的HelloWorldService是没有package的。
通向架构师的道路(第十三天)Axis2 Web Service安全初步
分类:架构师之路目录(?)[+]CSDN学院讲师招募,诚邀您加入!博客Markdown编辑器上线啦PMBOK第五版精讲视频教程火星人敏捷开发1001问通向架构师的道路(第十三天)Axis2 Web Service安全初步2012-08-02 16:1716470人阅读评论(8)收藏举报service web classloader tomcat web服务webservice一、WSSecurity简述安全的Web服务是Web服务成功的必要保证。
但大家都知道,Web服务使用XML来进行数据交换,而XML在默认情况下是明文编码的;同时,大部分Web服务使用HTTP协议作为传输协议,同样,HTTP也是使用明文方式来传输数据的。
这就造成了在不加密的传输协议上传输不加密的信息,从而使信息传输的保密性受到威胁。
作为企业级的应用,以上的方式不能满足安全性基本要求:² 数据在internet上传输的时侯是不应该被第三方能够看到的;² 双方必须能够验定彼此间的来源;² 双方必须能够确定被传送的数据没有被在中途中遭到黑客的修改。
通过使用SSL协议我们可以解决第一个问题即:"不应该被第三方看到";使用数字签名和数字证书可以解决后面的两个问题。
当使用数字证书方法时,Web 服务请求者必须有一个由可信认证中心签署的数字证书。
请求者使用这个证书来表明它们的身份,并对 SOAP 消息进行数字签名。
对方系统接收到消息后,就可对消息做时间戳记并进行日志记录。
此时,数字签名会得到验证。
验证过程将确保消息来自发送方,并且还要验证消息内容在传输过程中没有被篡改。
IBM、Microsoft 和 Verisign 于2002年十二月份联合发布了一个关于 Web 服务安全性(Web ServicesSecurity,WS-Security)的规范,该规范描述如何向 SOAP 消息附加签名和加密报头;另外,它还描述如何向消息附加安全性令牌(包括二进制安全性令牌,如 X.509 证书),提供了一套帮助 Web 服务开发者保护 SOAP消息交换的机制。
基于Axis2的web服务安全框架设计与实现
形式的多样性 ,详 细研究 了 Axs i 2的消 息处理 机制 ,并 在 SA O P通信 协议 基础上 ,设计 了一个 完整 的、符 合 w s 一 e
收 稿 日期 :2 1-01 ; 修 订 日期 :2 1-21 0 11 —0 0 11—5 基 金 项 目 : 国家 自然 科 学 基 金 项 目 (0 7 1 1 79 1 l )
21 0 2年 5 月
计 算机 工程 与设 计
C VPUTER OI L ENGI NEERI NG AND DES 3 No 5 13 .
第 3卷 3
第5 期
基于 A i xs 2的 w b服 务 安 全 框 架 设 计 与 实 现 e
De in a d i lme t t n o b s r ies c rt r me r a e n Ax s sg n mp e n ai fwe e vc e u iy fa wo k b s d o i2 o
X ONG Gu n -a ,MU - n , HANG Xi- a , I u — n I a gci De u Z j nj J oj 2 i G u
O 引 言
随 着 网络 技 术 的 发 展 ,we b服 务 以 其 良好 的 扩 展 性 和
据加密技术 ,文献 E ]研究 了 X 3 ML加密 用 于访 问控 制 , 文献 [—]提出 了基 于 S A 协议 的安全模 型 ,文献 [ — 45 O P 6 7 ]研究 了新 型 的 WSSc r y 全规 范 ,文献 [ ]在 A— -eui 安 t 8
数 字签名 、消息加 密和基 于角 色的访问控 制 ,能够接收各 种基 于 S A 协 议的客 户端请 求,具有很好 的安全性 和兼容 性, O P
axis2 webservice入门手册(JS,Java,PHP调用实例源码)思途科技出品
思途科技,网络营销专家
思途科技 让有需求的客户找到你
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </operation> </service> 二、项目打包并发布 1.可使用你熟悉的 IDE 进行打包成 HelloWorld.aar 参考直接打包方式: 在命令符行境下,将当前目录切换到该项目包下。如博主的例子就需要切换到 sample 所在 的文件夹,注意并非切换进 sample。使用如下命令:jar cvf HelloWorld.aar . 完成在当前 目录生成 HelloWorld.aar 。请注意命令末尾的点“.”。 2.发布,使用前面提到的登录 axis2 后看到的 Upload Service 工具 将 HelloWorld.arr 部署到 Tomc 上。 3.发布测试,如博主例子访问 http://localhost:8088/axis2/services/HelloWorld?wsdl 查看第 2 步骤中部署的 HelloWrold 的描述文件。 如果有报错,则需根据错误信息检查上述步骤。如果没有错误信息,那么 HelloWorld 的 service 端就算完成了。 三、简单客户端调用 1.一个简单的 Java 调用客户端。 参考代码: package example.client; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class TestClient {
webservice实例
Web Service实现包--AXIS2学习笔记一教程来源:作者:栏目:JAVA教程更新时间:较新字体尺寸:缩小放大我比较懒惰,不想把user guide全部翻译,就记录一些点吧。
Axis2是全新设计的,在2004年的“Ax is峰会”上,大家决定采用新的架构来让Axis更加的富有弹性,更有效率,并且更加的可配置。
Axis2现在具有的一些feature: SpeedLow memory foot printAXIOM - AXis Object ModelHot DeploymentAsynchronous Web ServicesMEP Support - Message Exchange PatternsFlexibilityStabilityComponent-oriented deploymentTransport frameworkWSDL support有些feature现在看不懂,还是先动手做一下,感性认识一下吧第一步:下载AXIS2。
/axis2/download.cgi。
很有趣,在apache 的Web Service 的Project目录下面还看不到AXIS2。
要下那个binary的版本,因为里面有例程。
第二步:Copy axis2.war到$TOMCAT_HOME/webapps目录下面。
Tomcat好像只能用JDK1.4,我在JDK1.5 用不出来。
第三步:打开http://localhost:8080/axis2,就可以看到axis2的Welcome页面了。
点一下Validate 和Services,看是不是都没有错误。
都没有错误的话,就表示deploy成功了。
那个adminstration页面可以通过上传文件来hot deploy Web service,可以用来remote deploy。
第四步:研究例程。
先从"samples/userguide/src"目录下的例程看起。
使用axis2构建WebService服务
使用axis2构建WebService服务以下文档将介绍是使用Tomcat6.0和Apache Axis2开发、部署和测试一个简单的WebService服务。
本文示例为最简单数据类型。
下一章将介绍复杂数据类型的传输。
WebService让一个程序可以透明地调用互联网程序,不管具体的实现细节。
只要WebService公开了服务接口,远程客户端就可以调用服务。
WebService是基于http协议的组建服务,WebService是分散式应用程序的发展趋势。
1.工作环境MyEclipse6.0.1 + JDK1.6 + Axis2-1.3其中Axis2-1.3需要下载Binary Distribution和WAR这两个文件。
目前Axis2的最高版本已到达1.5.2.安装Axis2将下载的Axis2-1.3 W AR文件解压缩,得到axis2.war文件。
将其拷贝到%Tomcat安装目录%webapps下即可。
3.检验安装启动(或重新启动)Tomcat,在地址栏中输入:http://localhost:8080/axis2点击Validate,显示Axis2 Happiness Page4.WebService中的服务器端(1)新建Java工程(2)新建服务器类,建立Hello.javapackage cn.hxyh.webservice;public class Hello {public String getHello() {System.out.println("Hello Service received");return"Hello world!" ;}}(3)在./bin下建立META-INF目录,新建service.xml文件<service name="Hello"><Description>helloword example description</Description><parameter name="ServiceClass"locked="false">cn.hxyh.webservice.Hello</parameter><operation name="getHello"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation></service>(4)打包生成aar文件在命令符环境下,将目录转到./bin。
MyEclipse10使用Axis2开发webservice
1. 下载Axis2插件和部署环境Axis2官方网站:/axis2/java/core/index.html2. 为MyEclipse10安装Axis2开发插件,解压codegen-1.6.2.zip和service-1.6.2.zip,复制解压后的文件到MyEclipse10安装目录的dropins目录下,并新建一个记事本文件,命名为:axis2.link,写入内容:path=D:\\Program Files\\MyEclipse 10.1\\MyEclipse 10\\dropins。
重启MyEclipse10,即可看到Axis2插件已经安装成功3. 配置部署环境。
解压axis2-1.6.2-war.zip文件,把得到的axis2.war文件复制到Tomcat安装目录下的webapp文件夹下,并启动Tomcat。
在浏览器输入网址:http://localhost:8080/axis2/,看到如下界面,表示部署环境配置成功。
4. 开发webservice服务端。
新建web project(不能是java project)。
并添加com.server包,在包下建立两个类:DoubleArith.java和FloatArith.java,并写入以下内容。
生成Axis2服务端部署文件,DoubleArith.aar和FloatArith.aar。
先运行Axis2Server,使程序在classes文件夹下生成DoubleArith.class和FloatArith.class文件,因为这两个文件是生成aar 文件的必备文件这样就在D:\Run目录下生成DoubleArith.aar文件。
同理,可以生成FloatArith.aar。
把DoubleArith.aar和FloatArith.aar文件从D:\Run文件夹复制到Tomcat\webapp\axis2\WEB-INF\services目录下。
axis2之webservice新手超详细教程
A XIS2之WEBSERVICE新手超详细教程---------------尚明Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON 等技术,本教程是主要阐述如何构建一个基本的Axis2 webservice应用,里面的许多环节高手可直接略过,本教程完全针对新手。
一、环境安装安装myeclipse下载地址:/file/4238159/48030981-6b56-40a4-a93b-8f424ee4f33a安装mysql下载地址:/file/4238159/de64cf2f-4217-4e11-bb98-8e6c5dd24155安装mysql-workbench(mysql可视化工具)下载地址:/file/4238159/becf913f-56a6-4d68-b248-134113b73535安装tomcat下载地址:/file/4238159/ec6a2250-99ff-464e-a978-be184c96e4e7下载Axis2服务包下载地址:/file/4238159/bb3db6e3-2f7d-4343-b472-c1fa714dba95下载Axis2开发插件包下载地址:/file/4238159/aa39505f-079b-43be-9479-15a2d3e98cbb安装jdk下载地址:/file/4238159/7ba342f9-277f-4b9c-b5e7-b0c5b7dfc151二、环境配置1)Java环境配置a)设置JAVA_HOME图1.图2设置JAVA_HOME=D:\Program Files\Java\jdk1.6.0_10* D:\Program Files\Java\jdk1.6.0_10为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写,注意环境变量最后面不能加分号,D:\Program Files\Java\jdk1.6.0_10;这么写是错误的。
通向架构师的道路(第十天)之Axis2-Web-Service(一)
一、Axis2简介1.1 介绍Axis2Axis框架来自Apache 开放源代码组织,它是基于JAVA语言的最新的SOAP 规范(SOAP 1.2)和SOAP withAttachments 规范(来自Apache Group )的开放源代码实现。
有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。
AXIS的最新版本可以从/axis/index.html下载。
下载下来后直接解压即可用了。
下图是AXIS核心引擎的体系结构图:整个AXIS项目包括以下几个部分:ü消息流子系统消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。
处理程序是一个处理请求、响应和故障流的对象。
处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
ü传输框架子系统提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
ü数据编码子系统AXIS完全按照XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
ü其他AXIS完全支持WSDL 以及日志记录、出错以及故障处理机制。
它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。
AXIS目前版本支持的标准是:W3C SOAP1.1 和1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java APIfor XML-Based RPC)1.0。
1.2 开发项目中如何选择使用Axis2和其它的WebService²如果你的应用程序需要支持多语言即有C++, .net, Java,你应该选择Axis2。
使用axis2创建并发布webservice.
点击查看已部署的服务
练习1
部署服务MyService,服务代码为MyService.java 依次访问服务的update方法和echo方法
练习2
部署服务WeatherService,服务类文件为 WeatherService.java
依次访问服务的setWeather方法和getWeather 方法
编写服务代码
服务代码
package samples.quickstart.service.pojo; import java.util.HashMap;
public class StockQuoteService { private HashMap map = new HashMap();//存储(symbol,price)值对 //按照symbol取price
存放部署描述文件的META-INF文件夹
和包名对应的文件夹结构,最底层放编译 后的class文件
文件夹可以直接部署,也可以打包成*.aar部署,部署位置为: tomcat目录\webapps\axis2\WEB-INF\services
启动tomcat
浏览器中输入地址http://localhost:8080/axis2
Axis2应用将充当SOAP服务器,监听SOAP消息,转 发给相应的服务。
创建和部署webservice的方式
Code-first approach: 先写服务代码,再部署服
务(手工编写WSDL或者使用工具生成WSDL)
POJO(Plain Old Java Objects)方式 AXIOM方式
使用Axis2创建和部署web服务
使用Axis2部署服务—环境准备
MYECLIPSE中用axis2插件开发web service
2011-04-05由/axis2/java/core/download.cgi下载axis2-1.4.1-bin.zip和axis2-1.4.1-war.zip(网络中诸多教程都是这个版本,便于发现问题时好解决)。
将axis2-1.4.1-war.zip解压后拷入tomcat\webapps,然后重启tomcat,tomcat会自动识别war文件并生成axis2文件夹。
然后输入http://localhost:8080/axis2/会看到欢迎界面。
由/dist/ws/axis2/tools/1_4_1/下载插件axis2-eclipse-codegen-wizard.zip和axis2-eclipse-service-archiver- wizard.zip两个文件,解压。
将这两个文件夹放入MyEclipse 8.5\dropins中,Axis2_Codegen_Wizard_1.3.0中增加2个jar backport-util-concurrent-3.1.jar、geronimo-stax-api_1.0_spec-1.0.1.jar,且修改plugin.xml增加这2个jar如图:Axis2_Codegen_Wizard_1.4.0其实是1.3.0版本文件夹改个名,且修改plugin.xml中<plugin>标签中的version为”1.4.0”通过命令行进入myeclipse.exe所在文件夹输入myeclipse.exe -vm "C:\Program Files\Java\jdk1.6.0_10\bin\java.exe" -clean -console -consoleLog -debug -vmargs -Xmx384M(注意查看自己的java路径)重启myeclipse通过开发服务端类来发布服务新建web project:sayhello首先我们先建一个包在src右键new->package,取名com在这个包下新建一个类Hellopackage com;/**服务端* @author tower**/public class Hello {public String helloworld(String name) { return"helloworld," + name;}}通过服务端类生成wsdl最终将要生成的hello.wsdl[自定义名称]放到src 目录下刷新后可见通过wsdl生成aar,发布服务再选择前述生成的wsdl,选择next点击load 最终将aar文件包输出到WEB-INF下,并命名将aar文件复制到tomcat/webapps/axis2/WEB-INF/services目录下。
Tomcat配置https安全访问的Axis2 Webservice给java和C#调用
一.前期准备。
1. 如何编写Axis2 Webservice服务这里就不说了,有需要的可以参考本人百度文库的另一篇文档:/view/aafc47e5580216fc710afd58.html2. 下载axis2-1.7.1-war.zip(其他版本亦可),解压得到axis2.war,放到Tomcat的webapps 目录下,启动tomcat,会自动生成axis2文件夹。
3. 把写好代码的axis2程序包(本例是AxisServer.aar)放到axis2的services目录下,启动Tomcat(即启动Axis2服务)二.生成https访问的SSL安全证书等文件1.随便在一个文件夹下,新建一个server和一个client的空文件夹。
并新建一个keytools.bat 的批处理,编辑批处理的内容如下(红色方块部分需按自己的实际情况填写):set SERVER_DN="CN=127.0.0.1, OU=SPH, O=SPH, L=sh, S=sh, C=CN"set CLIENT_DN="CN=Client, OU=SPH, O=SPH, L=sh, S=sh, C=CN"set PASS_SET= 123456keytool -genkey -v -alias server -keyalg RSA -keystore C:/ZipOut/server/server.keystore -dname %SERVER_DN% -validity 3650 -storepass %PASS_SET% -keypass %PASS_SET%keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore C:/ZipOut/client/client.p12 -dname %CLIENT_DN% -validity 3650 -storepass client -keypass clientkeytool -export -alias client -keystore C:/ZipOut/client/client.p12 -storetype PKCS12 -storepass client -rfc -file C:/ZipOut/client/client.cerkeytool -import -alias client -v -file C:/ZipOut/client/client.cer -keystore C:/ZipOut/server/server.keystore -storepass %PASS_SET%keytool -export -alias server -keystore C:/ZipOut/server/server.keystore -storepass %PASS_SET% -rfc -file C:/ZipOut/server/server.cerkeytool -import -file C:/ZipOut/server/server.cer -storepass %PASS_SET% -keystore C:/ZipOut/client/client.truststore -alias server -nopromptpause2.双击批处理文件,即会在server和client目录下生成需要的证书等文件。
快速上手指南 - 基于Eclipse Axis2 插件的Web Service开发[最新]【优秀】
快速上手指南 - 基于Eclipse Axis2 插件的Web Service开发[最新]【优秀】(文档可以直接使用,也可根据实际需要修订后使用,可编辑推荐下载)axis2创建web service(一)axis2 是新一代的web service开发工具,它会让你的web service开发变得轻松,快捷。
下面让我们以一个实际的例子来体验一下。
首先,工欲善其事,必先利其器。
就让我们先做好一些必备的准备工作吧。
1.下载axis2 的2进制的包和war,现在的最新版本是发布时间是2021-8-25地址分别是:2.把下载后的war放入tomcat的webapps目录里,然后启动tomcat,这样war包就会自动解压为目录axis2在浏览器中输入 ://localhost:8080/axis2/,如果一切正常你会看到下面的画面3,就开始准备一下axis2的eclispe的插件了。
axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的。
下载地址是下载完2个压缩文件后,可以直接把解压后的文件拷贝到plugins目录中,也可以在links目录中写文件路径的方式来安装插件,安装完插件后,打开eclipse,在package explorer 中点击右键--->选择new---->other如果安装正确你会看到这样准备工作就都做好了。
接下来就是正式开发了。
axis2创建web service(二)工具都已经准备齐全了。
我们来动手做一个小例子来小试牛刀!这一节我们先利用axis2来发布一个web service 的服务,然后在下一节我们做一客户端来调用这个服务。
我们的服务很简单的,就是输入一个字符串,然后打印出一段字符串。
代码很简单,主要是测试用。
Java代码1.2.3.public class SimpleServer {4.5. /**6. * 简单的测试方法7. *8. */9. public String simpleMethod(String name) {10. return name + "Say this is a Simple method ^-^";11. }12.13.}主要的过程就是如何利用axis2的eclispe插件来发布这个服务啦。
Axis2 webservice 发布教程 ,整合到自己的项目中
Web Project项目整合Axis2网上的教程全都是生成了.aar文件后,复制到axis2\WEB-INF\services\下面,这样给人的感觉就是自己的服务还得靠Axis2.war包才能运行,这不扯蛋吗?这里教大家把Webservice 发布到自己的项目中。
1.下载Axis2.war ,复制web-inf/services目录到自己的项目WEB-INF下,2.打开Myeclipse 新建一个web Project复制Axis2.war 包下的所有JAR包到项目lib目录下。
3.在项目的WEB.XML 中添加如下配置<!-- Axis2配置--><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>AxisAdminServlet</servlet-name><servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisAdminServlet</servlet-name><url-pattern>/axis2-admin/*</url-pattern></servlet-mapping><mime-mapping><extension>inc</extension><mime-type>text/plain</mime-type> </mime-mapping>4.编写Webservice 服务端类5.发布服务右击-新建-other点击下一步这里选择编译后的Class目录,工作空间下的项目编译目录,点击下一步。
基于AXIS2的Web Service开发
前言Axis2是目前比较流行的WebService引擎。
WebService被应用在很多不同的场景。
例如,可以使用WebService来发布服务端Java类的方法,以便使用不同的客户端进行调用。
这样可以有效地集成多种不同的技术来完成应用系统。
WebService还经常被使用在SOA中,用于SOA各个部分交换数据。
本课程重点讲解了Axis2的核心功能,并提供了三个项目以使学员理解并掌握如何将Axis2应用于不同的场景。
本课程站在初学者角度介绍了Axis2的大多数常用的功能,例如,以多种方式编写和发布WebService、JAX-RPC、JAX-WS、复杂类型传输、WebSer vice会话管理、Axis2模块等。
本课程共分为两部分,其中第一部分为Axis2基础知识讲解。
在这部分介绍了前面所述的Axis2 知识。
第二部分介绍了三个小的项目。
这三个项目的功能类似。
所不同的是,它们使用了不同的技术来实现。
第一个项目使用Java Swing技术实现了个人信息管理(PIM)系统,这个系统可以对个人信息(如姓名、职位、电话等)进行增、删、改、查。
在这些操作中,涉及到了如何使用WebService来传输和下载图像文件、传输查询结果(R esultset对象)等技术难点。
第二个项目使用Struts 2.1.6(目前Struts 2的最新版,2009年1月发布)来实现PIM。
功能与第一个PIM类似。
只是这个系统为Web版。
在这个项目中学员可以学习到如果将WebService应用在Web程序中。
该系统的主要思想是如果Web程序和WebService部署在同一台机器上,Web程序可以直接调用WebService所对应的Java类。
当然,也可以象第一个项目一样,直接通过HTTP SOAP协议调用WebService。
在第二个项目中同时使用了这两种方式来实现。
这两种调用方式分别封装在两组Mo del类中。
可以通过配置struts.xml文件来提定使用哪组模型类(调用方式)。
WebService的开发模版(Axis2_15环境)
WebService的开发模版(Axis2_15环境)Axis2差不多升级到1.5了,下载地址:://apache.etoak /ws/axis2/1_5/axis2-1.5-bin.zip://apache.etoak /ws/axis2/1_5/axis2-1.5-war.zip两个包,bin是开发包,war是部署包。
环境:axis2-1.5jdk1.5一、创建项目导创建一个Java项目,项目结构如以下图:Service└─src└─pojo└─META-INF二、导入axis2的包解压缩axis2-1.5-bin.zip到一个名目下,然后直截了当引入axis2的jar包即可。
也能够讲a xis2的包复制到lib下。
三、创建服务axis2服务的创建过程确实是写Java类。
那个地点创建一个最简单的Service,作为公布对象。
package pojo;/*** 测试Service** @author leizhimin 2020-8-4 15:48:13*/public class SimpleService {public String doSomething(String taskname) {System.out.println("MyServiceImpl is calling doSomething with "+ t askname + "!");return taskname + "is finished!";}}把创建好的SimpleService.class文件拷贝到axis的pojo下面,假如没有pojo文件夹那么自己创建一个。
四、描述服务在项目的src\META-INF文件夹下面,创建services.xml,内容如下:<service name=" SimpleService "scope="application"targetNamespace=" :/ /lavasoft.blog.51cto /"><messageReceivers><messageReceiver mep=" :// /2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOn lyMessageReceiver"/><messageReceiver mep=" :// /2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMess ageReceiver"/></messageReceivers><parameter name="ServiceClass">pojo.SimpleService</parameter></service>服务名:SimpleService服务实现类:pojo.SimpleService生成SimpleService.aar文件,目的是类文件能够带包名进行公布服务1 d->进入到项目的〝src〞名目 执行下面命令-〝jar -cvf SimpleService.aar META-INF〞;五、部署服务将下载的axis2-1.5-war.zip解开,得到一个axis2.war,将其解压缩到tomcat的默认的w eb公布名目webapp下面,比如,在我机器上会产生F:\apache-tomcat-6.0.20\webapps \axis2的名目,名目下面确实是axis2.war里面的内容。
使用axis2访问webservice.
return translatorString;
}
练习
阅读WeatherWS-2.xml,调用服务的getWeatherbyCityName操作 阅读WeatherWS-1.xml ,调用服务的getWeather操作 阅读ValidateCodeWebService.xml,调用cnValidateByte操作
</TranslatorStringResult> </TranslatorStringResponse> </Body >
public class Translation { public static void main(String[] args) { try { ServiceClient client = new ServiceClient(); // 创建ServiceClient对象 // 创建Option对象,该对象包含服务的属性,如地址,soapAction,传输协议等 Options opts = new Options(); // 设置目标服务地址 opts.setTo(new EndpointReference( " /webservices/EnglishChinese.asmx")); // 设置操作的soapAction值 opts.setAction("/TranslatorString"); // 指定soap版本,默认是1.1,这里指定为1.2 opts.setSoapVersionURI(Constants.URI_SOAP12_ENV); client.setOptions(opts); // 为ServiceClient设置option // 发送请求并得到返回结果,请求和响应均是一个OMElement对象 OMElement res = client.sendReceive(createPayLoad()); //输出返回结果,如有进一步需求,只要对返回结果的xml做解析即可 System.out.println(res); } catch (AxisFault e) { e.printStackTrace(); } }
Java Web 服务 Axis2 WS-Security基础
Java Web 服务: Axis2 WS-Security基础本文来自编程入门网:/Programming/Java/201110/30204.htm简介:了解如何将Rampart 安全模块添加到Apache Axis2 并开始在Web 服务中使用WS-Security 特性。
安全性对于众多企业服务来说都是一个重要需求。
并且,尝试实现自己的安全性也颇具风险,因为任何微小的疏忽都会导致严重的安全漏洞。
这些特征引起了人们对安全处理标准化的兴趣,许多专家为标准作出贡献并避免出现任何个人的疏漏。
基于SOAP 的Web 服务可以使用广泛支持的WS-Security 和相关标准来满足它们的安全需求,允许针对每种服务相应地配置安全性。
Apache Axis2 通过Rampart 模块支持这些安全标准(见参考资料)。
在本文中,您将看到如何为Axis2 安装、配置和使用Rampart 以实现基本的安全功能,即在一个服务请求中发送用户名和密码。
在本系列的后续文章中,您将理解如何使用Rampart 实现更加复杂的安全性。
WS-SecurityWS-Security 是向SOAP Web 服务消息交换添加安全性的一种标准(见参考资料)。
它使用一个SOAP 消息头部元素将安全信息附加到消息中,使用令牌(token)的形式传递不同类型的声明(包括名称、身份、密匙、组、特权、功能等等)以及加密和数字签名信息。
WS-Security 支持多种形式的令牌、多个可信任域、多种签名格式和多种加密技术,因此大多数情况下头部信息需要针对每种内容包含特定的格式和算法识别。
附加的信息会导致头部信息产生复杂的结构,如清单1 所示(进行了大量编辑)—包含签名和加密的样例消息:清单1. 包含签名和加密的样例消息将更进一步,探讨清单1 所示的复杂结构类型。
WS-Security 应用于实际的SOAP 消息交换。
服务实现可以检验WS-Security 是否恰当应用于传入的消息,但是客户机需要提前知道它们必须实现什么才能使用服务。
web-service-实例-axis2框架下基于rampart安全认证的
一、web sevices服务端axis2框架下基于rampart安全认证实例:1、下载axis2.war包;rampart-bin的压缩包(此处注意axis2的版本与jdk、tomcat 版本的兼容性问题)2、解压axis2压缩包3、搭建web项目datatransmission;将lib下的jar包导入到项目中;复制axis2-web目录到项目根目录;将WEB-INF下的conf、modules、services目录复制到项目根目录的WEB-INF下;再在刚刚考入的services目录下新建任意文件夹(例webs);再在刚刚新建的文件夹webs下新建META-INF文件目录;再在META-INF文件目录下新建services.xml文件;4、services.xml文件内容如下<?xml version="1.0"encoding="UTF-8"?><serviceGroup><service name="BusinessService"><description>test rampart service</description><operation name="getCurData"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><operation name="rampartMethod"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><parameter name="ServiceClass"locked="false">com.service.BusinessService</parameter><module ref="rampart"/><parameter name="InflowSecurity"><action><items>UsernameToken</items><passwordCallbackClass>com.rampart.WsServiceAuthHandler</passwordCallbackCl ass></action></parameter></service></serviceGroup>注:这里service暴露两个方法rampartMethod 及getCurData 供客户的访问调用;如果服务端的某些方法不想被访问可设为私有或放在其他的包下面;(同时axis2暂不支持list等集合方法【这里有些模糊,大家可以尝试下】)5、解压rampart-1.4.zip将lib目录下的jar包导入到项目中;将modules下的文件考入到项目根目录下modules文件目录中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、web sevices服务端axis2框架下基于rampart安全认证实例:1、下载axis2.war包;rampart-bin的压缩包(此处注意axis2的版本与jdk、tomcat 版本的兼容性问题)2、解压axis2压缩包3、搭建web项目datatransmission;将lib下的jar包导入到项目中;复制axis2-web目录到项目根目录;将WEB-INF下的conf、modules、services目录复制到项目根目录的WEB-INF下;再在刚刚考入的services目录下新建任意文件夹(例webs);再在刚刚新建的文件夹webs下新建META-INF文件目录;再在META-INF文件目录下新建services.xml文件;4、services.xml文件内容如下<?xml version="1.0"encoding="UTF-8"?><serviceGroup><service name="BusinessService"><description>test rampart service</description><operation name="getCurData"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><operation name="rampartMethod"><messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation><parameter name="ServiceClass"locked="false">com.service.BusinessService</parameter><module ref="rampart"/><parameter name="InflowSecurity"><action><items>UsernameToken</items><passwordCallbackClass>com.rampart.WsServiceAuthHandler</passwordCallbackCl ass></action></parameter></service></serviceGroup>注:这里service暴露两个方法rampartMethod 及getCurData 供客户的访问调用;如果服务端的某些方法不想被访问可设为私有或放在其他的包下面;(同时axis2暂不支持list等集合方法【这里有些模糊,大家可以尝试下】)5、解压rampart-1.4.zip将lib目录下的jar包导入到项目中;将modules下的文件考入到项目根目录下modules文件目录中。
文件目录结构如下:6、在项目的web.xml文件中添加<servlet><display-name>Apache-Axis Servlet</display-name><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>7、项目整体目录结构8、新建类8.1WsServiceAuthHandler.java 内容如下:package com.rampart;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.log4j.Logger;import org.apache.ws.security.WSPasswordCallback;/**** @author leno**/public class WsServiceAuthHandler implements CallbackHandler {private final static String USERNAME = "csxt";private final static String PASSWORD = "123456";private Logger log = Logger.getLogger(WsServiceAuthHandler.class);/*** 〈一句话功能简述〉〈功能详细描述〉** @seejavax.security.auth.callback.CallbackHandler#handle(javax.security.auth.cal lback.Callback[])* @param callbacks* @throws IOException* @throws UnsupportedCallbackException*/@Overridepublic void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {WSPasswordCallback pCallback = (WSPasswordCallback) callbacks[0];// 标识符String id = pCallback.getIdentifer();// 此处获取到的password为null,但是并不代表服务端没有拿到该属性。
// 这是因为客户端提交过来的密码在SOAP 消息中已经被加密为MD5// 的字符串,如果我们要在回调方法中作比较,那么第一步要做的就是把服务端准备好的密码加密为MD5 字符串,由于MD5// 算法参数不同结果也会有差别,//String password = pCallback.getPassword();("接收到WebService请求,userName[" + id + "]");if (null == USERNAME) {("验证用户失败,原因:您没有权限访问,用户名为空!");throw new UnsupportedCallbackException(pCallback, "您没有权限访问,用户名为空!");} else if (!USERNAME.equals(id)) {("验证用户失败,原因:您没有权限访问,用户名错误!");throw new UnsupportedCallbackException(pCallback, "您没有权限访问,用户名错误!");} else {/*** 1. 查询数据库,得到数据库中该用户名对应密码* 2. 设置密码,wss4j会自动将你设置的密码与客户端传递的密码进行匹配* 3. 如果相同,则放行,否则返回权限不足信息*/pCallback.setPassword(PASSWORD);}pCallback.setIdentifier("service");}}8.2新建类BusinessService.java 内容如下:package com.service;/*** @see ws获取数据** @author leno** @date 2014/11/10*/public class BusinessService {public String getCurData() {return "hello world!";}public String rampartMethod(String param) {return "hello world!" + param;}}8.3项目结构:9、服务端基本搭建完毕。
客户端:1、新建一个java project 整体目录如下2、将axis2 lib 下的jar包与rampart lib下的jar包导入项目;在项目下建资源包repository.modules将axis2 modules 下的文件与rampart modules 下的文件考入;在项目下建资源包repository将axis2-1.6.1-war\axis2\WEB-INF\conf 下的文件axis2.xml考入;打开axis2.xml文件,找到<module ref="addressing"/>并在其下面添加内容:<module ref="rampart"/><parameter name="OutflowSecurity"><action><items>UsernameToken</items><user>csxt</user><passwordCallbackClass>com.rampart.client.ClientAuthHandler</passwordCallba ckClass></action></parameter>3、新建类3.1、ClientAuthHandler.java 内容如下:package com.rampart.client;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.ws.security.WSPasswordCallback;/**** @author leno**/public class ClientAuthHandler implements CallbackHandler {private final static String USERNAME = "csxt";private final static String PASSWORD = "123456";/*** 〈一句话功能简述〉〈功能详细描述〉** @seejavax.security.auth.callback.CallbackHandler#handle(javax.security.auth.cal lback.Callback[])* @param callbacks* @throws IOException* @throws UnsupportedCallbackException*/@Overridepublic void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {//客户端 wss4j内容发送到服务端.W SPasswordCallback pCallback = (WSPasswordCallback) callbacks[0];S tring id = pCallback.getIdentifer();//客户端===getIdentifer==="+idi f (USERNAME.equals(id)) {pCallback.setPassword(PASSWORD);}}}3.2、DocumentClient.java 内容如下:package com.client;import org.apache.axiom.om.OMAbstractFactory;import org.apache.axiom.om.OMElement;import org.apache.axiom.om.OMFactory;import org.apache.axiom.om.OMNamespace;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.client.ServiceClient;import org.apache.axis2.context.ConfigurationContext;import org.apache.axis2.context.ConfigurationContextFactory;/*** @see ws客户端* @author leno**/public class DocumentClient {//服务地址private static EndpointReference targetEPR = new EndpointReference( "http://localhost:80/datatransmission/services/BusinessService");/*** @see获取repository路径* @return*/private String getAxis2ConfPath() {StringBuilder confPath = new StringBuilder();confPath.append(this.getClass().getResource("/").getPath());confPath.append("repository");return confPath.toString();}/*** @see获取repository路径下axis2.xml文件* @return*/private String getAxis2ConfFilePath() {String confFilePath = "";confFilePath = getAxis2ConfPath() + "/axis2.xml";return confFilePath;}public void invokeRampartService() {Options options = new Options();options.setTo(targetEPR);options.setAction("urn:rampartMethod");ServiceClient sender = null;try {String confPath = getAxis2ConfPath();String confFilePath = getAxis2ConfFilePath();ConfigurationContext configContext = ConfigurationContextFactory .createConfigurationContextFromFileSystem(confPath, confFilePath);sender = new ServiceClient(configContext, null);sender.setOptions(options);OMFactory fac = OMAbstractFactory.getOMFactory();OMNamespace omNs = fac.createOMNamespace("","");OMElement callMethod = fac.createOMElement("getCurData", omNs);// //传参数--(参数名称/参数值)// OMElement inner1 = fac.createOMElement("param", omNs);// inner1.setText("abc");// callMethod.addChild(inner1);OMElement response = sender.sendReceive(callMethod);//获取返回来的参数--XML格式//System.out.println("response ====>" + response);//取出XML格式下第一个参数(所有的数据:封装为json数据格式)System.out.println(response.getFirstElement().getText());} catch (Exception e) {e.printStackTrace();} finally {if (sender != null)sender.disengageModule("addressing");try {sender.cleanup();} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {DocumentClient documentClient = new DocumentClient();documentClient.invokeRampartService();}}4、客户端搭建完毕。