webservice五种发布方式及客户端调用范本模板.docx
- 文档编号:8677824
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:27
- 大小:231.32KB
webservice五种发布方式及客户端调用范本模板.docx
《webservice五种发布方式及客户端调用范本模板.docx》由会员分享,可在线阅读,更多相关《webservice五种发布方式及客户端调用范本模板.docx(27页珍藏版)》请在冰豆网上搜索。
webservice五种发布方式及客户端调用范本模板
WebService四种发布方式总结
Author:
yczhang
1.CXF方式
CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1。
5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j—1。
6.2.jar”报错,报的错为:
java。
lang.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!
!
!
使用cxf+spring搭建WebService:
第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:
而泰康的was环境则需要如下jar包:
明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复.
第二步,配置web。
xml文件,如下(重要的地方已标记):
contextConfigLocation
/applicationContext。
xml
〈listener〉〈listener—class>org。
springframework。
web。
context.ContextLoaderListener
〈/listener〉
〈!
——CharacterEncodingfilter——〉
〈filter〉
〈filter-name>encodingFilter〈/filter-name〉
filter。
CharacterEncodingFilter
〈param—name>encoding〈/param-name>
〈param—value〉UTF—8
〈/init—param>
〈/filter〉
〈url—pattern〉/*
〈/filter-mapping>
〈servlet〉
〈servlet-name>CXFServletorg。
apache。
cxf。
transport.servlet.CXFServlet
〈servlet—mapping>
〈servlet—name〉CXFServlet〈/servlet—name〉
〈url-pattern〉/webservice/*〈/url—pattern>
〈/servlet—mapping〉
上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;
第三步,编写接口类与实现类,注意注解
接口类
@WebService
publicinterfaceSendService{
publicbooleansendOA(@WebParam(name="param”)Stringparam);
publicbooleansendOrg(OrgEntityorg);
}
实现类
@WebService(endpointInterface=”com.service。
SendService",serviceName=”sendService”)
publicclassSendServiceImplimplementsSendService{
publicbooleansendOA(Stringparam){
System。
out.println("—----——sendOA---—-——--param:
"+param);
if(param。
equals("zhoujian”)){
returntrue;
}
returnfalse;
}
publicbooleansendOrg(OrgEntityorg){
System。
out.println("—-——--—sendOrg-—begin--———--”);
returntrue;
}
}
第四步,Spring配置文件
xmlversion=”1。
0”encoding=”UTF—8"?
〉
xmlns=”http: //www.springframework.org/schema/beans” xmlns: xsi="http: //www。 w3.org/2001/XMLSchema-instance" xmlns: p=”http: //www.springframework。 org/schema/p” xmlns: jaxws="http: //cxf.apache.org/jaxws" xsi: schemaLocation=” http: //www。 springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring—beans。 xsd http: //cxf.apache.org/jaxws http: //cxf.apache。 org/schemas/jaxws.xsd"> 〈importresource=”classpath: META-INF/cxf/cxf。 xml"/> META—INF/cxf/cxf—extension-soap。 xml"/〉 META-INF/cxf/cxf-servlet。 xml"/〉 〈jaxws: endpointid="sendServie”implementor="com。 service。 impl。 SendServiceImpl” address=”/sendServie”/> <! —- clientid="sendServiceClient"serviceClass=”com.service。 SendService" address="http: //10。 137.138.11: 9080/Wb/webservice/sendServie? wsdl”/〉—->
“jaxws:
client”该标签可以不必写,访问时可以手动拼接该url
第五步,发布,直接部署到服务器,访问:
http:
//10.137.138。
11:
9080/Wb/webservice/sendServie?
wsdl
2.Xfire方式
据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了.
Xfire方式发布webservice:
第一步,添加jar包,如下:
第二步,修改web。
xml文件
〈servlet>
xfire.transport。
http.XFireConfigurableServlet〈/servlet-class>
〈load—on-startup>0
〈servlet—name〉XFireServlet〈/servlet—name>
〈/servlet—mapping>
第三步,编写接口类
接口类:
publicabstractinterfaceIBankingService{
publicabstractStringtransferFunds(StringparamString1);
}
实现类:
publicclassBankingServiceimplementsIBankingService{
publicStringtransferFunds(StringfromAccount)
{
returnfromAccount+”:
ok”;
}
}
第四步,编写services。
xml配置文件
在WEB-INF目录下新建目录META-INF,在该目录下新建文件夹xfire,该目录下新建文件services.xml
xmlversion=”1。
0”encoding=”UTF—8”?
〉
〈beansxmlns=”http:
//xfire。
codehaus。
org/config/1.0">
〈namespace〉mybank
com.mybank。 xfire。 example.IBankingService
〈implementationClass>
com.mybank.xfire。
impl。
BankingService
〈/beans>
第五步,发布,部署到服务器,访问url:
http:
//localhost:
9080/Xfire/services/Banking?
wsdl
3.AXIS2方式
Axis2发布WebService有两种方式,其一是利用axis2插件打成aar包放到axis_war里面部署到服务器发布;其二是不打包发布(本例);我不清楚打包发布有什么好处,感觉很麻烦项目外还得部署一个war,现在介绍第二种不打包的方式,类似xfire,同时由于cxf与was不兼容导致wsdl.jar报错,但是xfire与axis2也用到wsdl。
jar却不报错,我个人也是很费解,泰康项目目前使用的就是axis2方式。
Axis2发布WebService:
第一步,添加jar包,如下:
很多是吧,不过都是从axis。
war里面WEB—INF下的lib目录复制来的。
第二步,修改web.xml文件
〈servlet〉
apache.axis2。
transport.http。
AxisServlet
〈/servlet>
〈servlet—name〉AxisServlet〈/servlet-name〉
第三步,编写实现类
publicclassServiceImpl{
publicStringsayHello(Stringname){
System。
out.println(”================”);
return”hello:
”+name;
}
}
第四步,增加WEN—INF内容
将axis.war解压下的WEN—INF文件夹内的conf、modules复制到项目WEB-INF下
第五步,在WEB—INF下创建文件夹services(名字不可改),在该目录下创建文件夹(名称随意),在该目录下创建文件夹META—INF(名称不可改),在该目录下创建文件services。
xml(名称不可改),该文件内容为:
〈?
xmlversion="1。
0"encoding=”UTF—8”?
〉
〈servicename=”axisDemo">
〈description〉
WebService例子
〈parametername=”ServiceClass">
com.ServiceImpl
〈/parameter〉
//www。 w3.org/2004/08/wsdl/in-out” class=”org。 apache.axis2。 rpc。 receivers。 RPCMessageReceiver”/> 〈messageReceivermep=”http: //www。 w3.org/2004/08/wsdl/in-only” class="org。 apache.axis2.rpc。 receivers.RPCInOnlyMessageReceiver”/〉 〈/messageReceivers〉 第六步,部署到服务器,发布URL为: http: //localhost: 9080/Axis2Test/services/axisDemo? wsdl 4.AXIS1方式 同上,不知道AXIS1哪里不好,配置也很简单,如下: 第一步,添加jar包 第二步,修改web。 xml 〈servlet—class〉 org.apache.axis。 transport.http。 AxisServlet 第三步,实现类与实体类 实现类: packagecom; publicclassAxis{ publicStringsayHello(Stringname){ System。 out。 println(”============: ”+name); return"hi: "+name; } publicStringsayHelloToUser(Useru){ System。 out.println(”============: "+u.getId()); System.out.println(”============: ”+u。 getPath()); System.out。 println("============: ”+u.getAdd()); return"hi: ”+u.getName(); } } 实体类: packagecom; publicclassUser{ privateStringid; privateStringname; privateStringadd; privateStringpath; gettersetter……方法 第四步,创建配置文件: 在WEB—INF下新建文件“server-config。 wsdd" 〈? xmlversion=”1.0”encoding=”UTF-8"? > 〈deploymentxmlns=”http: //xml.apache。 org/axis/wsdd/” xmlns: java=”http: //xml.apache。 org/axis/wsdd/providers/java”> -—globalConfiguration标签内容为系统默认无需更改→ 〈globalConfiguration〉 〈parametername="attachments。 Directory”value=”./attachments”/〉 〈parametername="attachments。 implementation” value=”org.apache.axis。 attachments。 AttachmentsImpl”/> 〈parametername="sendXsiTypes”value=”true”/〉 〈parametername=”sendXMLDeclaration"value="true"/〉 sendMinimizedElements”value="true"/〉 〈requestFlow〉 〈handlertype=”java: org.apache。 axis.handlers。 JWSHandler”〉 〈parametername="scope”value="session"/〉 〈/handler〉 org.apache.axis。 handlers。 JWSHandler"> 〈parametername=”scope”value=”request”/〉 〈parametername=”extension"value=".jwr"/〉 〈/handler〉 〈handlername=”LocalResponder" type="java: org.apache。 axis。 transport。 local。 LocalResponder"/> type="java: org。 apache.axis.handlers.http。 URLMapper”/〉 type=”java: org。 apache.axis.handlers.SimpleAuthenticationHandler"/〉 〈! —service标签是需要配置的—→ 〈! —name是url中需要的参数—→ RPC”〉 〈! —allowedMethods的value值是方法名可以写*-→ 〈parametername=”allowedMethods"value="*”/> 〈! —className的value值是类路径-→ 〈parametername="className”value=”com.Axis”/〉 〈! —wsdlTargetNamespace的wsdl文件中TargetNamespace的值-→ 〈parametername="wsdlTargetNamespace”value=”http: //service.impl.tdi.taikang。 tivoli.ibm。 com/”/> <! —此处很重要,若方法需要传实体类,则配置此处-→ 〈beanMappingqname=”myNS: User”xmlns: myNS="urn: BeanService”languageSpecificType="java: com。 User”/〉 —默认—→ 〈handlertype=”URLMapper"/> org.apache.axis。 handlers。 http.HTTPAuthHandler"/〉 〈/requestFlow> 〈transportname="local"〉 〈responseFlow> 〈/responseFlow> 〈/transport〉 第五步,部署,同上。 5.HTTPCLIENT方式 Httpcilent属于一种比较简单的实现方式 我们将WebService发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该WebService,常用的有两种: 1、通过浏览器HTTP调用,返回规范的XML文件内容 2、通过客户端程序调用,返回结果可自定义格式 接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例 步骤如下: 准备工作: 用到的jar包有: 下载链接 (http: //download.csdn。 net/detail/lanxuezaipiao/5354480) 第一步: 新建JavaProject,项目名称为HttpCallWebService 第二步: 将所需jar包导入到库中 第三步: 编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式: 静态和动态构造,下面分别介绍这两种方式: 注: 这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改。 静态构造请求数据: packagecom.http; importjava.io。 ByteArrayInputStream; importjava。 io.IOException; importjava.io.InputStream; importmons。 httpclient.HttpClient; importor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- webservice 发布 方式 客户端 调用 范本 模板