如何使用Web Service进行WSDL逆向axis2生成服务端代码

> 博客详情
开发环境:myeclipse 8.6+tomcat 6.0,例子,完成一个调用webservice服务端保存一个用户信息的demo。根据网上相关网友的代码和介绍,在myeclipse 里完成了一个简单的webservice服务端。
以下是工程目录:文章后面附源码。
开发步骤:
1、首先在Myeclipse里新建一个web project.在lib中加入以下jar包:
abdera-core-0.4.0-incubating.jar abdera-extensions-json-0.4.0-incubating.jar abdera-extensions-main-0.4.0-incubating.jar abdera-i18n-0.4.0-incubating.jar abdera-parser-0.4.0-incubating.jar ant-1.6.5.jar antlr-2.7.7.jar aopalliance-1.0.jar asm-2.2.3.jar axiom-api-1.2.7.jar axiom-impl-1.2.7.jar bcprov-jdk15-1.43.jar commons-codec-1.3.jar commons-collections-3.2.1.jar commons-httpclient-3.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar commons-pool-1.5.2.jar cxf-2.1.9.jar cxf-manifest.jar FastInfoset-1.2.7.jar geronimo-activation_1.1_spec-1.0.2.jar geronimo-annotation_1.0_spec-1.1.1.jar geronimo-javamail_1.4_spec-1.3.jar geronimo-jaxws_2.1_spec-1.0.jar geronimo-jms_1.1_spec-1.1.1.jar geronimo-servlet_2.5_spec-1.2.jar geronimo-stax-api_1.0_spec-1.0.1.jar geronimo-ws-metadata_2.0_spec-1.1.2.jar jaxb-api-2.1.jar jaxb-impl-2.1.9.jar jaxb-xjc-2.1.9.jar jaxen-1.1.jar jdom-1.0.jar jettison-1.1.jar jetty-6.1.21.jar jetty-util-6.1.21.jar jra-1.0-alpha-4.jar js-1.6R7.jar jsr311-api-0.8.jar neethi-2.0.4.jar oro-2.0.8.jar saaj-api-1.3.jar saaj-impl-1.3.2.jar serializer-2.7.1.jar slf4j-api-1.5.8.jar slf4j-jdk14-1.5.8.jar spring-beans-2.0.8.jar spring-context-2.0.8.jar spring-core-2.0.8.jar spring-dao-2.0.8.jar spring-jms-2.0.8.jar spring-support-2.0.8.jar spring-web-2.0.8.jar velocity-1.6.2.jar WHICH_JARS wsdl4j-1.6.2.jar wss4j-1.5.8.jar wstx-asl-3.2.9.jar xalan-2.7.1.jar xml-resolver-1.2.jar xmlbeans-2.4.0.jar XmlSchema-1.4.5.jar xmlsec-1.4.3.jar 文后会以附件的形式打包。
2、然后便可以开始配置:
在WEB-INF 下新建webservice.xml;名称可自定义。
webservice.xml的内容如下
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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"&
&import resource="classpath:META-INF/cxf/cxf.xml" /&
&import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /&
&import resource="classpath:META-INF/cxf/cxf-servlet.xml" /&
&bean id="newUserInfo" class="demo.spring.impl.NewUserInfoServiceImpl" /&
&jaxws:endpoint id="newUserInfoService" implementor="#newUserInfo" address="/newUserInfoService"&&/jaxws:endpoint&
在web.xml中为以下内容:
&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd"&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&WEB-INF/webservice.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&servlet-name&CXFServlet&/servlet-name&
&servlet-class&org.apache.cxf.transport.servlet.CXFServlet&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&CXFServlet&/servlet-name&
&url-pattern&/service/*&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app& 3、代码编写:
定义实体bean类:UserInfoInput.java和UserInfoResponse.java
package demo.spring.
* 用户信息实体类
* @author thebigboy
public class UserInfoInput {
public UserInfoInput() {
public UserInfoInput(String userid, String username, int age, boolean sex,
String home) {
this.userid =
this.username =
this.age =
this.sex =
this.home =
public String getUserid() {
public void setUserid(String userid) {
this.userid =
public String getUsername() {
public void setUsername(String username) {
this.username =
public int getAge() {
public void setAge(int age) {
this.age =
public boolean isSex() {
public void setSex(boolean sex) {
this.sex =
public String getHome() {
public void setHome(String home) {
this.home =
public String toString() {
StringBuffer sbr = new StringBuffer();
sbr.append("[userid=");
sbr.append(userid);
sbr.append(",");
sbr.append("username=");
sbr.append(username);
sbr.append(",");
sbr.append("age=");
sbr.append(age);
sbr.append(",");
sbr.append("sex=");
sbr.append(sex==true?"1":0);
sbr.append(",");
sbr.append("home");
sbr.append(home);
sbr.append("]");
return sbr.toString();
package demo.spring.
public class UserInfoResponse {
public UserInfoResponse() {
public UserInfoResponse(String userid, String username, int age, boolean sex,
String home) {
this.userid =
this.username =
this.age =
this.sex =
this.home =
public String getUserid() {
public void setUserid(String userid) {
this.userid =
public String getUsername() {
public void setUsername(String username) {
this.username =
public int getAge() {
public void setAge(int age) {
this.age =
public boolean isSex() {
public void setSex(boolean sex) {
this.sex =
public String getHome() {
public void setHome(String home) {
this.home =
public String toString() {
StringBuffer sbr = new StringBuffer();
sbr.append("[userid=");
sbr.append(userid);
sbr.append(",");
sbr.append("username=");
sbr.append(username);
sbr.append(",");
sbr.append("age=");
sbr.append(age);
sbr.append(",");
sbr.append("sex=");
sbr.append(sex==true?"1":0);
sbr.append(",");
sbr.append("home");
sbr.append(home);
sbr.append("]");
return sbr.toString();
先定义接口:NewUserInfoService.java
package demo.
import javax.jws.WebP
import javax.jws.WebS
import demo.spring.bean.UserInfoI
import demo.spring.bean.UserInfoR
@WebService
public interface NewUserInfoService {
UserInfoResponse addUserRequest(
@WebParam(name = "userInfo", targetNamespace = "http://spring.demo/") UserInfoInput userInfo);
} 接口的实现:NewUserInfoServiceImpl.java,这里可以写客户端调用webservice,服务端里的具体的逻辑处理。
package demo.spring.
import javax.jws.WebS
import org.slf4j.L
import org.slf4j.LoggerF
import demo.spring.NewUserInfoS
import demo.spring.bean.UserInfoI
import demo.spring.bean.UserInfoR
@WebService(endpointInterface = "demo.spring.NewUserInfoService")
public class NewUserInfoServiceImpl implements NewUserInfoService{
private Logger logger = LoggerFactory.getLogger(NewUserInfoServiceImpl.class);
public UserInfoResponse addUserRequest(UserInfoInput userInfoInput) {
("Client调用 webservice输入的用户信息是:"+userInfoInput.toString());
UserInfoResponse userInfoResponse = new UserInfoResponse();
userInfoResponse.setUserid("1
"+userInfoInput.getUserid());
userInfoResponse.setAge( 1+ userInfoInput.getAge());
userInfoResponse.setHome("1
"+userInfoInput.getHome());
userInfoResponse.setSex(false);
userInfoResponse.setUsername("1
"+userInfoInput.getUsername());
return userInfoR
} 最后一步,在发布到tomcat上的时候,
注:如使用进行开发,需下载和,然后在本机安装的地方,在的文件夹下的文件夹中新建文件夹,放入以上两个包才可以进行开发。说明见:
发布到tomcat之后,访问
,该链接会拦截,列出该项目下所有的服务:
如图:点击相应的链接即可进入某一个接口。
例如我的本地地址是:&/
源码见:,导入myeclipse即可使用。
后面再讲解如何通过服务端生成wsdl文件,供客户端生成 java文件,调用等等。
人打赏支持
码字总数 1941
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥ 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
手把手教Axis1 4利用wsdl生成webserice服务端
下载积分:30
内容提示:手把手教Axis1 4利用wsdl生成webserice服务端
文档格式:PDF|
浏览次数:9|
上传日期: 22:17:35|
文档星级:
全文阅读已结束,如果下载本文需要使用
 30 积分
下载此文档
该用户还上传了这些文档
手把手教Axis1 4利用wsdl生成webserice服务端
官方公共微信1996人阅读
5_Webservice(10)
& 一般开发Web Service,是选写服务端,再根据生成的WSDL文件生成客户端。看过一本SOA的书中说,如果实现防止不同语言一些特定的数据类型的不兼容性,推荐先定义WSDL接口,包括一输入输出参数、返回值及相关的数据类型等,再通过WSDL来生成服务器端和客户端,这样的好处是:服务端不用关心客户端怎么调用,客户端也不用关系服务端如何实现。
&&&&&& 关于Eclipse中Axis2的配置方法,请看我的,下面来新建一个WSDL文件,如下图:
改个名字为“manager.wsdl”,如下图:
下一步,定义命名空间和协议等信息,默认即行。如下图:
finish后,会在主工作区出现如下图:
这是manager.wsdl的图形化形式,点击“Source”会可查看到源代码:
这是默认生成的wsdl,我们要根据我们的项目需要,修改上面的图,首先对方法名进行修改,如下图:
可见,修改之后,右边的input和output也跟着修改了,这两个就是定义plus的输入和输出。
点击input参数“plus”右边的提示箭头,进入下图:
就在这里定义输入参数和和参数类型等信息,因为我们plus(float x, float y)方法中有两个参数x和y,故我们将上图改成两个参数的序列:
变成下图,对比一下方法plus(float x, float y),下图也不会太难理解吧!
我们返回manager.wsdl视图,选择output参数右边的箭头,进入下图:
我们在这里设置float plus(float x, float y)方法的返回值及其类型,因其返回值只有一个,我们只须把上面的out的类型改成我们方法中用的float,改后,如下图:
有没有注意到上图左上角有个
图标,点击它,进入下图:
我们可以在这里对输入输出的参数及其他数据类型进行修改,如果在上面的操作过程中,不小心产生了多余的标签的话,也可以在这里去除。
好了,我们再回到manager.wsdl,在源代码视图里右键选“Validate”,对xml文档进行检验,如果有错误的,就根据需要修改。
好了,图形化编写的wsdl文档完成了,顺便说一下,方法是可以定义多个的,如下图:
为简单起见,我们就先以刚才做定义的那个方法为例,看看,如何根据wsdl文件,自动生成Web Service的服务器端。
我们New一个Web Service,如下图:
记得在Web Service type中选择“Top down Java Bean Web Service”,如下图:
然后,在Service definition中找到刚才写的那个manager.wsdl文件。
回到Web Service对话框,将服务类型的滑块调到“Develop service”处,
接下来,就next –& next –-& finish就行。它会自动生成Web Service服务端的接口和类,在类中,可找到我们定义的方法:
我们只要修改方法plus的方法体,以实现我们要实现的功能即行。如下:
这是通过WSDL反向生成Web Service服务端的最简单一个例子,可能看不到有什么好处,没有像那样的简便快捷,但如果是一些特有的数据类型,如List,Set,这些,我们有在WSDL图形化设计中找到相应的替代类型,先定义WSDL再生成服务端接口,这样做,不仅Java开发客户端是没有问题的,用C#开发客户端也能成功没有出错!
但如果先开发服务器端的话,如果用到一些Java特有的数据类型,如List,Set,如果用其他语言生成的客户端,就可能出问题。同理,用C#开发服务端,如果用到像DataSet这样的返回类型的话,那如果用Java或者其他语言去开发客户端,也可能会出现问题的。
如果统一先写WSDL,再根据WSDL生成服务端和客户端,应该是一种很不错的做法,Eclipse在这方面的图形化支持给带给我们事半功倍的效果,这样做,也比较符合SOA的做法。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:125969次
积分:2514
积分:2514
排名:第14948名
原创:119篇
转载:66篇
(1)(10)(22)(2)(1)(1)(3)(3)(32)(13)(3)(12)(3)(6)(4)(2)(2)(2)(3)(6)(5)(26)(4)(6)(10)(2)(1)}

我要回帖

更多关于 生成webservice服务端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信