webservice五种发布方式及客户端调用.docx

上传人:b****8 文档编号:30248471 上传时间:2023-08-13 格式:DOCX 页数:28 大小:227.01KB
下载 相关 举报
webservice五种发布方式及客户端调用.docx_第1页
第1页 / 共28页
webservice五种发布方式及客户端调用.docx_第2页
第2页 / 共28页
webservice五种发布方式及客户端调用.docx_第3页
第3页 / 共28页
webservice五种发布方式及客户端调用.docx_第4页
第4页 / 共28页
webservice五种发布方式及客户端调用.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

webservice五种发布方式及客户端调用.docx

《webservice五种发布方式及客户端调用.docx》由会员分享,可在线阅读,更多相关《webservice五种发布方式及客户端调用.docx(28页珍藏版)》请在冰豆网上搜索。

webservice五种发布方式及客户端调用.docx

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

classpath:

/applicationContext.xml

org.springframework.web.context.ContextLoaderListener

--CharacterEncodingfilter-->

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

encodingFilter

/*

CXFServletorg.apache.cxf.transport.servlet.CXFServlet

1

CXFServlet

/webservice/*

上述标记的地方,第一处是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">

META-INF/cxf/cxf.xml"/>

META-INF/cxf/cxf-extension-soap.xml"/>

META-INF/cxf/cxf-servlet.xml"/>

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文件

XFireServlet

org.codehaus.xfire.transport.http.XFireConfigurableServlet

0

XFireServlet

/services/*

第三步,编写接口类

接口类:

publicabstractinterfaceIBankingService{

publicabstractStringtransferFunds(StringparamString1);

}

实现类:

publicclassBankingServiceimplementsIBankingService{

publicStringtransferFunds(StringfromAccount)

{

returnfromAccount+":

ok";

}

}

第四步,编写services.xml配置文件

在WEB-INF目录下新建目录META-INF,在该目录下新建文件夹xfire,该目录下新建文件services.xml

xmlversion="1.0"encoding="UTF-8"?

>

//xfire.codehaus.org/config/1.0">

Banking

mybank

com.mybank.xfire.example.IBankingService

com.mybank.xfire.impl.BankingService

第五步,发布,部署到服务器,访问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文件

AxisServletorg.apache.axis2.transport.http.AxisServlet

1

AxisServlet

/services/*

 

第三步,编写实现类

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"?

>

WebService例子

com.ServiceImpl

//www.w3.org/2004/08/wsdl/in-out"

class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

//www.w3.org/2004/08/wsdl/in-only"

class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

第六步,部署到服务器,发布URL为:

http:

//localhost:

9080/Axis2Test/services/axisDemo?

wsdl

 

4.AXIS1方式

同上,不知道AXIS1哪里不好,配置也很简单,如下:

第一步,添加jar包

第二步,修改web.xml

AxisServlet

org.apache.axis.transport.http.AxisServlet

AxisServlet

/services/*

第三步,实现类与实体类

实现类:

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"?

>

//xml.apache.org/axis/wsdd/"

xmlns:

java="http:

//xml.apache.org/axis/wsdd/providers/java">

--globalConfiguration标签内容为系统默认无需更改

value="org.apache.axis.attachments.AttachmentsImpl"/>

org.apache.axis.handlers.JWSHandler">

org.apache.axis.handlers.JWSHandler">

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值是方法名可以写*-

—className的value值是类路径-

—wsdlTargetNamespace的wsdl文件中TargetNamespace的值-

—此处很重要,若方法需要传实体类,则配置此处-

User"xmlns:

myNS="urn:

BeanService"languageSpecificType="java:

com.User"/>

—默认-

org.apache.axis.handlers.http.HTTPAuthHandler"/>

第五步,部署,同上。

5.HTTPCLIENT方式

Httpcilent属于一种比较简单的实现方式

 我们将WebService发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该WebService,常用的有两种:

 1、通过浏览器HTTP调用,返回规范的XML文件内容

     2、通过客户端程序调用,返回结果可自定义格式

     接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例

步骤如下:

 

准备工作:

用到的jar包有:

下载链接

第一步:

新建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;

importorg.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1