CXF 基础教程-------入门示例

CXF 入门示例


又一HelloWorld示例,老套的HelloWorld是入门经典。也是基础和必须掌握的,下面看看HelloWorldWebService,很简单。

需要的jar包如下:



1、 HelloWorldService服务器端代码

package com.hoo.service;

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

/**
 * class: CXF WebService服务端helloWorld示例
 *
 * @author e421083458
 * @createDate 2013-5-28下午4:56:58
 * @file HelloWorldService.java
 * @package com.hoo.service
 * @project cxf_demo01
 */
@WebService
@SOAPBinding(style = Style.RPC)
public class HelloWorldService {
    
    public String sayHello(@WebParam(name = "name") String name){
        return name + "say : Hello World";        
    }
}

要说明的是,上面的服务器端代码运用了JDK5的新特性Annotation,这个非常好用。
需要注意的是,如果不添加@SOAPBinding(style = Style.RPC)注解,将会出现异常:
com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error    
还有就是如果jdk版本在1.6下,也会出现上面的异常。
解决办法有:
1> 先用apt命令将主程序进行编译,然后生成一些java文件
2> 升级JDK到版本jdk1.6u17或以后


2、 发布HelloWorldService,代码如下:

package com.hoo.service.deploy;

import javax.xml.ws.Endpoint;

import com.hoo.service.HelloWorldService;

/**
 * class: 发布CXF WebService
 *
 * @author e421083458
 * @createDate 2013-5-28下午5:01:05
 * @file DeployHelloWorldService.java
 * @package com.hoo.service.deploy
 * @project cxf_demo01
 */
public class DeployHelloWorldService {
    /**
     * function: 发布WebService
     * @author e421083458
     */
    public static void deployService(){
        System.out.println("Service start......");
        HelloWorldService service = new HelloWorldService();
        String address = "http://localhost:9000/helloWorld";
        Endpoint.publish(address, service);
    }
    public static void main(String args[])throws InterruptedException{
        //发布WebService
        deployService();
        System.out.println("server ready......");
        Thread.sleep(1000*120);
        System.out.println("System exiting...");
        //休眠60秒后退出
        System.exit(0);
    }
}

运行上面的main函数后,如果没有发现异常。基本信息是这样的:


Service start......
2013-5-28 23:29:15 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}HelloWorldServiceService from class com.hoo.service.HelloWorldService
2013-5-28 23:29:16 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9000/helloWorld
2013-5-28 23:29:16 org.eclipse.jetty.util.log.Slf4jLog info
信息: jetty-7.2.2.v20101205
2013-5-28 23:29:16 org.eclipse.jetty.util.log.Slf4jLog info
信息: Started SelectChannelConnector@localhost:9000
server ready......



那么你在WebBrowser中请求:

http://localhost:9000/helloWorld?wsdl就可以看到xml内容了。


3、 定制客户端调用WebService的接口,这个接口中的方法签名和参数信息可以从wsdl中的内容看到,代码如下:

package com.hoo.service;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface IHelloWorldService {
    public String sayHello(@WebParam(name = "name") String name);
}

4、 编写客户端调用WebService代码
package com.hoo.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.hoo.service.IHelloWorldService;

public class HelloWorldServiceClient {
    public static void main(String args[]){
        //调用WebService
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(IHelloWorldService.class);
        factory.setAddress("http://localhost:9000/helloWorld");
        
        IHelloWorldService service = (IHelloWorldService) factory.create();
        System.out.println("[result]"+service.sayHello("e421083458"));
    }
}

运行上面的程序后,结果如下:

2013-5-28 23:30:24 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}IHelloWorldServiceService from class com.hoo.service.IHelloWorldService
[result]e421083458say : Hello World


本教程改编自:http://www.cnblogs.com/hoojo/category/276011.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值