CXF Helloword

最近由于项目需要,一直在学习OSGI,在学习OSGI的这段时间内,不断的接触到apache的一些优秀的开源项目,比如说FelixCXF等。Felix是Apache对OSGI R4规范的一个轻量级实现。你使用eclipse创建的plugin(插件)工程都是可以正常运行在Felix中的。前提是你创建bundle的时候选择标准选项这一栏。好了本篇文章主要是用来介绍CXF的,关于Felix就不再深入讨论了,有兴趣的可以自行去研究下。
        关于CXF,不做过多的解释。官方的解释已经够清楚了。相信大家之前在Java环境下创建webservice程序大多数选择的是xfire这个框架吧。后来好多专家不再推荐这个东东。都建议使用CXF。在未接触到CXF之前,本人一向喜欢用xfire这个框架来创建自己的webservice。还了,废话不多说,先来看个HelloWorld的程序,教大家快速上手。
        首先去Apache网站下载CXF所需要的jar,我本人下载是apache-cxf-2.2.10.zip这个包。这里为了方便期间创建一个java工程。啊?java工程,这有点不可思议了,不是要创建webservice吗?怎么是java工程?呵呵,这里就是CXF的神奇之处!
        添加必须的jar到你的classpath路径下。
        cxf-2.2.10.jar 核心jar
        jetty-6.1.21.jar 用来启动jetty服务器
        jetty-util-6.1.21.jar jetty辅助工具
        wsdl4j-1.6.2.jar wsdl支持工具
        XmlSchema-1.4.5.jar 
        这就是CXF的最小配置,以上jar包缺一不可
        创建一个接口

package  com.cxf.service;

public   interface  HelloWorldCxfService {
    
    String sayHello(String username);
}
        创建该接口的实现类
package  com.cxf.service;

public   class  HelloWorldCxfServiceImpl  implements  HelloWorldCxfService {

     public  String sayHello(String username) {
         return   " Hello, " + username;
    }
}
        发布webservice
package  com.cxf.server;

import  org.apache.cxf.frontend.ServerFactoryBean;

import  com.cxf.service.HelloWorldCxfService;
import  com.cxf.service.HelloWorldCxfServiceImpl;

public   class  Server {
    
     public   static   void  main(String[] args){
        HelloWorldCxfServiceImpl worldCxfServiceImpl = new  HelloWorldCxfServiceImpl();
        ServerFactoryBean factoryBean = new  ServerFactoryBean();
        factoryBean.setAddress( " http://localhost:8080/hello " );
        factoryBean.setServiceClass(HelloWorldCxfService. class );
        factoryBean.setServiceBean(worldCxfServiceImpl);
        factoryBean.create();
    }
}
        运行Server,注意不要关闭,在控制台会打印如下信息:
2010-9-10 9:44:16 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.cxf.com/}HelloWorldCxfService from class com.cxf.service.HelloWorldCxfService
2010-9-10 9:44:16 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:8080/hello
2010-09-10 09:44:16.296::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2010-09-10 09:44:16.296::INFO:  jetty-6.1.21
2010-09-10 09:44:16.390::INFO:  Started SelectChannelConnector@localhost:8080
        客户端调用
package  com.cxf.server;

import  org.apache.cxf.frontend.ClientProxyFactoryBean;

import  com.cxf.service.HelloWorldCxfService;

public   class  Client {
    
     public   static   void  main(String[] args) {
        ClientProxyFactoryBean factoryBean = new  ClientProxyFactoryBean();
        factoryBean.setAddress( " http://localhost:8080/hello " );
        factoryBean.setServiceClass(HelloWorldCxfService. class );
        HelloWorldCxfService worldCxfService = (HelloWorldCxfService) factoryBean.create();
        System.out.println(worldCxfService.sayHello( " 张三 " ));
    }
}
        运行Client代码,控制台打印如下信息:
2010-9-10 9:46:58 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.cxf.com/}HelloWorldCxfService from class com.cxf.service.HelloWorldCxfService
Hello,张三
        到此,我们的webservice,已经成功调用了。大家是不是迫不及待的想看下wsdl文件是啥样的呢?
在浏览器中输入 http://localhost:8080/hello?wsdl,即可看到wsdl文件了。其中 http://localhost:8080/hello部分为代码里指定的Address。
        wsdl文件信息:
   <? xml version="1.0"  ?>  
-  < wsdl:definitions  name ="HelloWorldCxfService"  targetNamespace ="http://service.cxf.com/"  xmlns:ns1 ="http://schemas.xmlsoap.org/wsdl/soap/http"  xmlns:soap ="http://schemas.xmlsoap.org/wsdl/soap/"  xmlns:tns ="http://service.cxf.com/"  xmlns:wsdl ="http://schemas.xmlsoap.org/wsdl/"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >
-  < wsdl:types >
-  < xsd:schema  attributeFormDefault ="unqualified"  elementFormDefault ="qualified"  targetNamespace ="http://service.cxf.com/"  xmlns:tns ="http://service.cxf.com/"  xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >
   < xsd:element  name ="sayHello"  type ="tns:sayHello"   />  
-  < xsd:complexType  name ="sayHello" >
-  < xsd:sequence >
   < xsd:element  minOccurs ="0"  name ="arg0"  type ="xsd:string"   />  
   </ xsd:sequence >
   </ xsd:complexType >
   < xsd:element  name ="sayHelloResponse"  type ="tns:sayHelloResponse"   />  
-  < xsd:complexType  name ="sayHelloResponse" >
-  < xsd:sequence >
   < xsd:element  minOccurs ="0"  name ="return"  type ="xsd:string"   />  
   </ xsd:sequence >
   </ xsd:complexType >
   </ xsd:schema >
   </ wsdl:types >
-  < wsdl:message  name ="sayHelloResponse" >
   < wsdl:part  element ="tns:sayHelloResponse"  name ="parameters"   />  
   </ wsdl:message >
-  < wsdl:message  name ="sayHello" >
   < wsdl:part  element ="tns:sayHello"  name ="parameters"   />  
   </ wsdl:message >
-  < wsdl:portType  name ="HelloWorldCxfServicePortType" >
-  < wsdl:operation  name ="sayHello" >
   < wsdl:input  message ="tns:sayHello"  name ="sayHello"   />  
   < wsdl:output  message ="tns:sayHelloResponse"  name ="sayHelloResponse"   />  
   </ wsdl:operation >
   </ wsdl:portType >
-  < wsdl:binding  name ="HelloWorldCxfServiceSoapBinding"  type ="tns:HelloWorldCxfServicePortType" >
   < soap:binding  style ="document"  transport ="http://schemas.xmlsoap.org/soap/http"   />  
-  < wsdl:operation  name ="sayHello" >
   < soap:operation  soapAction =""  style ="document"   />  
-  < wsdl:input  name ="sayHello" >
   < soap:body  use ="literal"   />  
   </ wsdl:input >
-  < wsdl:output  name ="sayHelloResponse" >
   < soap:body  use ="literal"   />  
   </ wsdl:output >
   </ wsdl:operation >
   </ wsdl:binding >
-  < wsdl:service  name ="HelloWorldCxfService" >
-  < wsdl:port  binding ="tns:HelloWorldCxfServiceSoapBinding"  name ="HelloWorldCxfServicePort" >
   < soap:address  location ="http://localhost:8080/hello"   />  
   </ wsdl:port >
   </ wsdl:service >
   </ wsdl:definitions >
                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值