使用CXF2.1的STP插件开发WebService
来源:互联网 发布:南极游 网络 编辑:程序博客网 时间:2024/04/29 03:08
前2篇(1,2)文章讲了如何用CXF2.0 在MyEclipse Blue Edition 6.1下开发WebService。但是CXF2.0版的STP插件很弱,而且生成一堆垃圾文件。因此,本文讲解如何在Eclipse下,用CXF2.1版的STP插件来开发一个简单的WebService。
由于CXF2.1版的STP插件是在Eclipse 3.4M4版上开发的,因此MyEclipse Blue Edition 6.1不能使用。本文使用的组合是Eclipse SDK 3.4M4,STP S200801091442 all in one版和apache-cxf-2.1-incubator-SNAPSHOT。
具体安装很简单,将Eclipse解压到C盘根目录,然后将STP中的feature和plugins目录覆盖Eclipse SDK中的feature和plugins目录。注意,feature和plugins中的同名目录不能覆盖。然后将cxf 2.1解压到任意目录。准备工作完成。
一、对STP插件进行设置
启动Eclipse 3.4M4,选择菜单Window->Preferences,在对话框左侧的SOA Tools分支下,可以进行STP插件的设置。
1. 添加CXF Runtime
选中分支中的Installed Runtimes,点击Add;
选择Apache CXF 2.0,然后Next;
浏览至apache-cxf-2.1-incubator-SNAPSHOT的解压目录,点击Finish。注意此处的JRE是插件运行的JRE,最好选择Sun的JRE1.5(我选IBM JRE的时候插件出错)。
2. 其他设置
选中JAX-WS,选择使用向导;
设定生成WSDL文件的Soap协议版本;
点击OK,完成插件的设置。
二、开发WebService
使用CXF开发WebService有两种模式:从Java接口开始;从WSDL文件开始。
介绍从Java接口开始开发。
1. 新建项目
选择菜单File->New->Java Project,建立一个叫JavaFirst的空java项目;
选择菜单File->New->Package,创建一个叫com.javafirst.pk的包。
再创建一个叫Hello的Interface,代码如下:
public String echo(String msg);
}
2. 添加JAX-WS能力
在Package Explorer中选中项目的根,选择Eclipse菜单SOA->JAX-WS->Enable JAX-WS;在弹出的对话框中选择Java First Programming Mode。
选择Runtime:
选择刚刚建立的接口文件:
一路OK完成添加能力。
这里最好在项目中增加一个lib文件夹,将apache-cxf-2.1-incubator-SNAPSHOT中的lib文件都paste进去;然后在项目的Build Path中删去cxf的runtime,然后手动添加lib中的jar文件;此外JRE也最好另外指定一个。
2. 生成代码
在Package Explorer中右键点击项目的根,选择右键菜单中JAX-WS Tools->Generate Code:
其中的Server和Client用于脱离容器测试本WebService,这里就选上吧。
点击Finish。此时的文件列表如图所示:
3. 编辑wsdl文件
自动生成的JavaFirst.wsdl文件有3处(可能)需要修改:
a. 为了便于发布以及便于编程人员理解,下面代码中的arg0可以修改为接口中定义的msg;注意,一旦修改,则不能通过后面生成的Client来测试了 。(这里我们先不修改。)
<xsd:sequence>
<xsd:element minOccurs="0" name="arg0" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="msg" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
b. 为了兼容.net需要将parameters等替换。
<wsdl:part name="parameters" element="tns:echo">
</wsdl:part>
</wsdl:message>
<wsdl:message name="echoResponse">
<wsdl:part name="parameters" element="tns:echoResponse">
</wsdl:part>
</wsdl:message>
<wsdl:part name="echoInput" element="tns:echo">
</wsdl:part>
</wsdl:message>
<wsdl:message name="echoResponse">
<wsdl:part name="echoOutput" element="tns:echoResponse">
</wsdl:part>
</wsdl:message>
c. wsdl发布的端口
修改格式为 http://<服务器URL>:<服务器端口>/<项目名>
<wsdl:port name="HelloPort" binding="tns:HelloSoapBinding">
<soap:address location="http://localhost:9090/HelloPort" />
</wsdl:port>
</wsdl:service>
<wsdl:port name="HelloPort" binding="tns:HelloSoapBinding">
<soap:address location="http://localhost:8888/JavaFirst" />
</wsdl:port>
</wsdl:service>
4. 编辑HelloImpl.java文件
简单的返回输入值:
public java.lang.String echo(java.lang.String arg0) ...{
System.out.println(arg0);
try ...{
java.lang.String _return = arg0;
return _return;
} catch (Exception ex) ...{
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
}
5. 打包发布
在Package Explorer中右键点击wsdl文件,选择菜单Build Package...即可生成war包。
注意此war包中没有包含任何的库文件,因此需要手动打包(比如用winrar之类),将lib目录添加到war包中的WEB-INF目录下。
将此war包发布到应用服务器,即可。
此时,发布的wsdl的端口是http://<server>:<port>/<context root>/services/<项目名>
这里所谓context root在WAS中就是发布WAR包时的上下文根,在tomcat中默认就是项目名。
三、测试发布的WebService
用其插件自动生成的Server和Client可以对WebService的逻辑进行测试。
只需修改Client代码如下:
public static void main(String[] args) throws Exception ...{
QName serviceName = new QName("http://pk.javafirst.com/", "HelloService");
QName portName = new QName("http://pk.javafirst.com/", "HelloPort");
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
"http://localhost:9090/HelloPort");
com.javafirst.pk.Hello client = service.getPort(portName, com.javafirst.pk.Hello.class);
// Insert code to invoke methods on the client here
String msg = "Hello";
String echo = client.echo(msg);
System.out.println(echo);
}
}
Server无需修改任何代码。
之后先运行Server,再运行Client即可。
另一种方式是Client调用刚刚发布的WebService进行测试。修改Client的代码如下(最主要是改wsdl的端口):
public static void main(String[] args) throws Exception ...{
QName serviceName = new QName("http://pk.javafirst.com/", "HelloService");
QName portName = new QName("http://pk.javafirst.com/", "HelloPort");
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,
"http://localhost:8888/JavaFirst/services/JavaFirst");
com.javafirst.pk.Hello client = service.getPort(portName, com.javafirst.pk.Hello.class);
// Insert code to invoke methods on the client here
String msg = "Hello";
String echo = client.echo(msg);
System.out.println(echo);
}
}
之后运行Client,即可进行测试(当然前提是WebService正在应用服务器上运行)。
完。
- 使用CXF2.1的STP插件开发WebService
- eclipse3.3+CXF2.1+STP配置webservice开发环境(
- 用CXF2开发 WebService
- 关于cxf2.1,发布webservice的学习
- webService--cxf2.7与JDK的兼容性问题
- 在Websphere Application Server 6.1.0.15下发布cxf2.1的WebService
- webservice实例--cxf2.7
- eclipse发布cxf2 webService
- 使用Eclipse3.2.1+STP.0.4.0+Apache Tuscany开发SCA的Java组件(1)设置篇
- 使用Eclipse3.2.1+STP.0.4.0+Apache Tuscany开发SCA的Java组件(1)设置篇
- 基于maven的web工程搭建CXF2.2.3 webservice
- cxf2.1服务端的构建过程
- 客户端调用CXF2.2.3 webservice
- cxf2.X开发
- cxf2.X开发
- cxf2.X开发
- 用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发
- 使用Eclipse3.2.1+STP.0.4.0+Apache Tuscany开发SCA的Java组件(2)代码篇
- 用AJAX调用SOAP Web服务:构建Web服务客户机
- XMLHttpRequest和AJAX入主Web开发
- 用AJAX开发智能Web应用程序之高级篇
- 用AJAX开发智能Web应用程序之基础篇
- AJAX及使用E4X编写Web服务脚本
- 使用CXF2.1的STP插件开发WebService
- IIS和APACHE共用80端口的方法
- 我还“活着”!
- 亲密接触ASP.Net(5)
- C#使用小代码采集
- 游戏外挂的基本编写原理(转)
- 编写数据库操作类,使ASP.NET中的数据库操作变得简单
- 关于多态
- 一个SQL大牛提的一个sql优化小测试