加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

利用CXF框架开发WebService

发布时间:2020-12-16 23:29:51 所属栏目:安全 来源:网络整理
导读:开发工具: MyEclipse 6.0 开发环境: 1. ???? jdk1.5 2. ???? CXF 框架,版本 apache-cxf-2.2.3.zip ,到 http://cxf.apache.org/download.html 下载 注:如使用 jdk1.6 进行开发,需下载 jaxb-api.jar 和 jaxws-api.jar ,然后在本机安装 JDK 的地方,在 j

开发工具:MyEclipse 6.0

开发环境:

1.???? jdk1.5

2.???? CXF框架,版本apache-cxf-2.2.3.zip,到http://cxf.apache.org/download.html下载

注:如使用jdk1.6进行开发,需下载jaxb-api.jarjaxws-api.jar,然后在本机安装JDK的地方,在jdk1.6.0jre文件夹下的lib文件夹中新建endorsed文件夹,放入以上两个jar包才可以进行开发

第一步,先在MyEclipse新建一个java项目,项目名为HelloWebService。

第二步,在项目中引入apache-cxf-2.2.3.ziplib下的所有jar包。

第三步,编写测试用接口以及其实现类:

?

接口:

?

?

Java代码
  1. package?test;??
  2. ??
  3. import?javax.jws.WebService;??
  4. ??
  5. public?interface?Hello?{??
  6. ??????
  7. ????public?String?sayHello(String?str);??
  8. ??
  9. }??

实现类:

?

Java代码
  1. package?test;??
  2. ??
  3. public?class?HelloImpl?implements?Hello?{??
  4. ??
  5. ????public?String?sayHello(String?str)?{??
  6. ??????????
  7. ????????System.out.println("调用成功");??
  8. ????????return?"Hello?"?+?str;??
  9. ????}??
  10. ??
  11. }??

?

在接口中添加WebService的注解,将其标注为WebService的服务接口。

?

?

Java代码
  1. @WebService??
  2. public?interface?Hello?{??

第四步,编写WebService的服务器端。

Java代码
  1. package?test;??
  2. ??
  3. import?org.apache.cxf.endpoint.Server;??
  4. import?org.apache.cxf.jaxws.JaxWsServerFactoryBean;??
  5. ??
  6. public?class?MainServer?{??
  7. ??????
  8. ????public?static?void?main(String[]?args)?{??
  9. ????????JaxWsServerFactoryBean?factory?=?new?JaxWsServerFactoryBean();??
  10. ????????factory.setAddress("http://localhost:8080/HelloWebService");??
  11. ????????factory.setServiceClass(HelloImpl.class);??
  12. ????????Server?server?=?factory.create();??
  13. ????????server.start();??
  14. ????}??
  15. }??

factory.setAddress("http://localhost:8080/HelloWebService");

设置服务在服务器上部署的位置

?

factory.setServiceClass(HelloImpl.class);

设置服务暴露的接口实现类

?

完成之后运行MainServer中的main方法。

?

注:因为CXF框架中有Jetty 6 服务器,所以这个的demo发布在其中运行。

?

之后打开浏览器,输入:

http://localhost:8080/HelloWebService?wsdl

如能看见以下画面则WebService发布成功:

?

Xml代码
  1. <?xml?version="1.0"?encoding="UTF-8"??>???
  2. -?<wsdl:definitions?name="HelloImplService"?targetNamespace="http://test/"?xmlns:ns1="http://schemas.xmlsoap.org/soap/http"?xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"?xmlns:tns="http://test/"?xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"?xmlns:xsd="http://www.w3.org/2001/XMLSchema">??
  3. -?<wsdl:types>??
  4. -?<xs:schema?elementFormDefault="unqualified"?targetNamespace="http://test/"?version="1.0"?xmlns:tns="http://test/"?xmlns:xs="http://www.w3.org/2001/XMLSchema">??
  5. ??<xs:element?name="sayHello"?type="tns:sayHello"?/>???
  6. ??<xs:element?name="sayHelloResponse"?type="tns:sayHelloResponse"?/>???
  7. -?<xs:complexType?name="sayHello">??
  8. -?<xs:sequence>??
  9. ??<xs:element?minOccurs="0"?name="arg0"?type="xs:string"?/>???
  10. ??</xs:sequence>??

第五步,编写客户端

Java代码
  1. package?test;??
  2. ??
  3. import?org.apache.cxf.jaxws.JaxWsProxyFactoryBean;??
  4. ??
  5. public?class?Client?{??
  6. ????public?static?void?main(String[]?args)?{??
  7. ????????JaxWsProxyFactoryBean?factory?=?new?JaxWsProxyFactoryBean();??
  8. ????????factory.setServiceClass(Hello.class);??
  9. ????????factory.setAddress("http://localhost:8080/HelloWebService");??
  10. ????????Hello?hello?=?(Hello)factory.create();??
  11. ??????????
  12. ????????System.out.println(hello.sayHello("weberyb"));??
  13. ????}??
  14. ??
  15. }??

?

factory.setServiceClass(Hello.class);

设置访问服务器端的指定接口。

?

factory.setAddress("http://localhost:8080/HelloWebService");

设置访问的服务的地址。

?

factory.create()

创建代理对象以供远程调用

?

之后运行Clientmain方法,可以在控制台的服务器端看见如下输出:

Java代码
  1. ....................??
  2. 2009-8-13?14:00:42?org.apache.cxf.service.factory.ReflectionServiceFactoryBean?buildServiceFromClass??
  3. 信息:?Creating?Service?{http://test/}HelloService?from?class?test.Hello??
  4. Hello?weberyb??

?

说明客户端调用WebService成功。

至此,这个简单的 WebService开发完毕 尝试过jdk1.6?? 它的包会变成import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; 并且没有factory.setAddress这个方法 采用自带的例子进行测试 会出现参数null错误,但是客户端调用服务器端都调用成功,可能原因是没有加载那两个JAR文件的问题,暂时没有测试

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读