cxf快速简单的实现webservice调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cxf快速简单的实现webservice调用相关的知识,希望对你有一定的参考价值。

webservice的历史和相关技术

参考:http://www.cnblogs.com/doosmile/archive/2012/06/21/2557351.html

webservice技术现在已经非常成熟,大浪淘沙后,目前java开发webservice的框架主要包括axis2和cxf。 

axis2和cxf都是apache旗下的产品,但是其目的不同,导致webservice开发方法也不一样。两个框架都得到了开发者的支持。有必要对二者进行以下对比。

 
 Axis2CXF
目标 WebService引擎 简易的SOA框架,可以作为ESB
ws* 标准支持 不支持WS-Policy WS-Addressing,WS-Policy, WS-RM, WS-Security,WS-I Basic Profile
数据绑定支持 XMLBeans、JiBX、JaxMe 、JaxBRI、ADB JAXB, Aegis, XMLBeans, SDO, JiBX
spring集成 不支持 支持
应用集成 困难 简单
多语言 支持C/C++ 不支持
部署 web应用 嵌入式
服务监控和管理 支持 不支持

结论:

  1. 如果希望以一种一致的方式实现webservice,特别是有跨语言的需求时,应该使用Axis2
  2. 如果需要在现有的java程序(包括web应用)中增加webservice支持,应该使用CXF

cxf服务端和客户端

服务端

pom文件

<!-- 服务端---->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.10</version>
</dependency>

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.10</version>
</dependency>

<!-- 客户端 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.1.10</version>
</dependency>

web.xml配置

<!-- 设置Spring容器加载配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-server.xml</param-value>
</context-param>

<!-- 加载Spring容器配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>

spring文件

xml中添加头文件

http://cxf.apache.org/jaxws    

http://cxf.apache.org/schemas/jaxws.xsd    

http://cxf.apache.org/jaxrs    

http://cxf.apache.org/schemas/jaxrs.xsd 

具体实现:

<bean id="greetingServiceImpl" class="com.mycompany.webservice.server.GreetingServiceImpl"/>
 <jaxws:endpoint id="greetingService"  implementor="#greetingServiceImpl"   address="/Greeting" />

接口

package com.mycompany.webservice.server;

import javax.jws.WebService;

@WebService 
public interface Greeting { 
   public String greeting(String userName); 
}

实现类

package com.mycompany.webservice.server;

import java.util.Calendar;
import javax.jws.WebService;

@WebService(endpointInterface = "com.mycompany.webservice.server.Greeting")
public class GreetingServiceImpl implements Greeting {

 public String greeting(String userName) {
  return "Hello " + userName + ", currentTime is "
    + Calendar.getInstance().getTime();
 }
}

客户端

public class GreetingServiceClient {
 public static void main(String[] args) {
  //创建WebService客户端代理工厂
  JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  //注册WebService接口
  factory.setServiceClass(Greeting.class);
  //设置WebService地址
  factory.setAddress("http://localhost:8080/yourProgramName/webservice/Greeting");
  Greeting greetingService = (Greeting)factory.create();
  System.out.println("invoke webservice...");
  System.out.println("message context is:"+greetingService.greeting("gary"));   
 }
}

 

 

  




















































以上是关于cxf快速简单的实现webservice调用的主要内容,如果未能解决你的问题,请参考以下文章

Webservice与CXF框架快速入门

如何使用CXF调用webservice接口

Spring+CXF+Maven发布Webservice

web service014——spring整合jaxws发布和调用CXF类型的webservice服务,拷贝服务端接口文件方式

SpringBoot + CXF快速实现SOAP WebService(支持Basic Auth)

我第一次接触webservice,怎么调用用web service接口,cxf或者axis2都行,网上找的例子,都有点错误