用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发

      上一篇文章已经介绍了如何在MyEclipse Blue Edition 6.1下安装CXF的插件STP。

      这次来讲下如何利用该工具快速开发一个简单的WebService。

      本文中使用的CXF为apache-cxf-2.0.5-incubator。

一、对STP插件进行设置:

      启动MyEclipse Blue Edition 6.1。选择菜单Window->Preferences,在对话框左侧的SOA Tools分支下,可以进行STP插件的设置。

      1. 添加CXF Runtime

      选中分支中的Installed Runtimes,点击Add;

     

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第1张图片

      选择Apache CXF 2.0,然后Next;

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第2张图片

      浏览至apache-cxf-2.0.5-incubator的解压目录,点击Finish。注意此处的JRE是插件运行的JRE,最好选择Sun的JRE1.5(我选IBM JRE的时候插件出错)。

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第3张图片

      2. 其他设置

      选中JAX-WS,选择使用向导;

      设定生成WSDL文件的Soap协议版本;

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第4张图片

      点击OK,完成插件的设置。

二、开发WebService

      使用CXF开发WebService有两种模式:从Java接口开始;从WSDL文件开始。

      这里介绍从Java接口开始开发(从WSDL文件开始开发的方法,看完本文自然可以领悟了。)

      1. 新建项目

      选择菜单File->New->Project...,选择SOA Tools下的JAX-WS Java First Project;

      输入项目名称,JavaFirst;

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第5张图片

      选择Runtime;

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第6张图片

      点击Finish即可建立项目。

      新建的项目最好手动建一个lib目录,然后将所有的cxf库文件都拷贝进来,然后删除项目build path中由向导添加的库,自己手动将lib中的库添加进项目的build path中。此外,JRE最好也换一下。

      2. 创建包

      选择菜单File->New->Package,创建一个叫com.javafirst.pk的包。

      3. 创建接口

      在刚刚创建的包下面,通过File->New->Interface,创建一个叫Hello的接口。

      接口中代码如下:

public   interface  Hello  {
    
public String echo(String msg);
}

       4. 添加WebService annotation

      在Package Explorer中,选中刚刚定义的接口,通过菜单SOA->JAX-WS->Create Web Service来添加;

      或者右键点击接口,在右键菜单中的JAX-WS Tools->Create Web Service来添加。

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第7张图片

      保留向导的缺省参数,生成WebService Annotaion。

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第8张图片

添加annotation后的代码如下:

@WebService(targetNamespace = " http://pk.javafirst.com/ " , name = " Hello " )
public   interface  Hello  {
    
public String echo(String msg);
}

      5. Save(此处需要预先选择Project->Build Automaticly)之后,插件会自动生成wsdl文件和一堆垃圾src。

此时,需要对wsdl文件进行编辑。需要修改的地方有3处:

a. 为了便于发布以及便于编程人员理解,下面代码中的arg0可以修改为接口中定义的msg;注意,一旦修改,则不能通过后面生成的Client来测试了 。

< xs:complexType  name ="echo" >
    
< xs:sequence >
        
< xs:element  minOccurs ="0"  name ="arg0"  type ="xs:string"   />
    
</ xs:sequence >
</ xs:complexType >

 

 

< xs:complexType  name ="echo" >
    
< xs:sequence >
        
< xs:element  minOccurs ="0"  name ="msg"  type ="xs:string"   />
    
</ xs:sequence >
</ xs:complexType >

 

b. 为了兼容.net需要将parameters等替换。

< wsdl:message  name ="echoResponse" >
    
< wsdl:part  name ="parameters"  element ="tns:echoResponse" >
    
</ wsdl:part >
</ wsdl:message >
< wsdl:message  name ="echo" >
    
< wsdl:part  name ="parameters"  element ="tns:echo" ></ wsdl:part >
</ wsdl:message >

 

< wsdl:message  name ="echoResponse" >
    
< wsdl:part  name ="echoOutput"  element ="tns:echoResponse" >
    
</ wsdl:part >
</ wsdl:message >
< wsdl:message  name ="echo" >
    
< wsdl:part  name ="echoInput"  element ="tns:echo" ></ wsdl:part >
</ wsdl:message >

c. wsdl发布的端口

修改格式为 http://<服务器URL>:<服务器端口>/<项目名>

< wsdl:service  name ="HelloService" >
    
< wsdl:port  name ="HelloPort"  binding ="tns:HelloServiceSoapBinding" >
    
< soap12:address  location ="http://localhost:9090/hello"   />
    
</ wsdl:port >
</ wsdl:service >

 

< wsdl:service  name ="HelloService" >
    
< wsdl:port  name ="HelloPort"  binding ="tns:HelloServiceSoapBinding" >
        
< soap12:address  location ="http://localhost:8088/JavaFirst"   />
    
</ wsdl:port >
</ wsdl:service >

      6. 删除所有的垃圾src。

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第9张图片

      7. 右键点击wsdl文件,通过JAX-WS Tools->Generate Code生成新的接口和实现代码。

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第10张图片

其中的Client和Server是用于脱离容器测试WebService的,一般都选上。

最后生成的文件列表如图所示:

用CXF2.0在MyEclipse Blue Edition 6.1下进行WebService开发_第11张图片

        8. 编辑HelloImpl.java文件

简单的返回输入值:

public   class  HelloImpl  implements  Hello  {

    
private static final Logger LOG = Logger.getLogger(HelloImpl.class.getName());

    
/* (non-Javadoc)
     * @see com.javafirst.pk.Hello#echo(java.lang.String  msg )*
     
*/

    
public java.lang.String echo(java.lang.String msg) 
        LOG.info(
"Executing operation echo");
        System.out.println(msg);
        
try {
            java.lang.String _return 
= msg;
            
return _return;
        }
 catch (Exception ex) {
            ex.printStackTrace();
            
throw new RuntimeException(ex);
        }

    }


}

      9. 发布

      右键点击wsdl文件,选择菜单Build Package...即可生成war包。

      注意此war包中没有包含任何的库文件,因此需要手动打包(比如用winrar之类),将lib目录添加到war包中的WEB-INF目录下。

      将此war包发布到应用服务器,即可。

      此时,发布的wsdl的端口是http://<server>:<port>/<context root>/services/<项目名>

      这里所谓context root在WAS中就是发布WAR包时的上下文根,在tomcat中默认就是项目名。

      因此,可以将wsdl文件中的地址和端口做相应的改动,注意修改了此处,如果用生成的Client来测试的话,Client中的相应地址也要改为和此处一致。

< wsdl:service  name ="HelloService" >
    
< wsdl:port  name ="HelloPort"  binding ="tns:HelloServiceSoapBinding" >
        
< soap12:address  location ="http://localhost:8088/Hello/services/Hello"   />
    
</ wsdl:port >
</ wsdl:service >

然后再重新打包,发布一次。

至此,一个简单的WebSerive已经发布成功。

你可能感兴趣的:(webservice,MyEclipse,service,SOAP,Parameters,binding)