设为首页 收藏本站
查看: 1020|回复: 0

[经验分享] 二、CXF 入门示例

[复制链接]

尚未签到

发表于 2017-3-1 07:17:51 | 显示全部楼层 |阅读模式
  又一HelloWorld示例,老套的HelloWorld是入门经典。也是基础和必须掌握的,下面看看HelloWorldWebService,很简单。
  需要的jar包如下:
DSC0000.png

  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;

/**
* <b>function:</b>CXF WebService 服务器端helloWorld示例
* @author hoojo
* @createDate 2011-3-16 上午08:29:07
* @file HelloWorld.java
* @package com.hoo.service
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
@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;
/**
* <b>function:</b> 发布CXF WebService
* @author hoojo
* @createDate 2011-3-17 上午09:24:33
* @file DeployHelloWorldService.java
* @package com.hoo.deploy
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class DeployHelloWorldService {
/**
* <b>function:</b>发布WebService
* @author hoojo
*/
public static void deployService() {
System.out.println("Server 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 * 60);
System.out.println("server exiting");
//休眠60秒后就退出
System.exit(0);
}
}
  运行上面的main函数后,如果没有发现异常。基本信息是这样的:

Server start ……
2011-3-17 10:17:25 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}HelloWorldServiceService from class com.hoo.service.HelloWorldService
2011-3-17 10:17:25 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9000/helloWorld
2011-03-17 10:17:25.375:INFO::jetty-7.2.2.v20101205
2011-03-17 10:17:25.468: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;

/**
* <b>function:</b> 客户端调用WebService所需要的接口
* @author hoojo
* @createDate 2011-3-17 上午09:00:00
* @file IHelloWorldService.java
* @package com.hoo.service
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
@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;

/**
* <b>function:</b>CXF WebService客户端调用代码
* @author hoojo
* @createDate 2011-3-16 上午09:03:49
* @file HelloWorldServiceClient.java
* @package com.hoo.client
* @project CXFWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
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("hoojo"));
    }
}
  运行上面的程序后,结果如下:

2011-3-17 10:23:34 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.hoo.com/}IHelloWorldServiceService from class com.hoo.service.IHelloWorldService
[result]hoojo say: Hello World

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348499-1-1.html 上篇帖子: [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之glassfish篇(二) 下篇帖子: 三、CXF对Interceptor拦截器的支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表