CXF结合spring发布WS服务,含SOAP services、RESTful services

1、访问:http://localhost:8088/sniperWS/services/
查看有哪些服务,包含Available SOAP services、Available RESTful services

2、客户端调用RESTful services:
http://localhost:8088/sniperWS/services/address/getSuggestions.query

调用示例:
$.ajax({
    url: "http://ip:port/sniperWS/services/address/getSuggestions.query",
    dataType: "json",
    data : {
  "address" : $("#address").val(),
  "max":10,
  "_type":"json"
 },
 cache : false,
 success: function(data) {
        response( $.map(data.addressVO, function( item ) {
   return {
                label: item.address,
                value: item.address
            }
  }));
    },
    error : function(suggestionRequest, textStatus, error) {
     alert(error);
 }
});

ws-services-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:jaxrs="http://cxf.apache.org/jaxrs"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd" default-autowire="byName">
 <!--spring发布web服务配置 --> 
<import resource="classpath:META-INF/cxf/cxf.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="addressService" class="cn.sniper.ws.service.AddressServiceImpl" />
<!-- 方式一:发布SOAP services -->
<!-- <jaxws:endpoint id="addressWS" implementor="#addressService" address="/addressWS" /> -->
<!-- 方式二:发布SOAP services -->
<jaxws:server id="addressWS" address="/addressWS"> 
     <jaxws:serviceBean> 
         <ref bean="addressService" /> 
     </jaxws:serviceBean> 
     
     <!-- <jaxws:inInterceptors>
  <bean class="cn.sniper.ws.service.LoggingInterceptor"></bean>
  </jaxws:inInterceptors> -->
</jaxws:server>
<!-- 发布RESTful services-->
<jaxrs:server id="addressServiceWS" address="/address">
 <jaxrs:extensionMappings>
  <entry key="json" value="application/json" />
  <entry key="xml" value="application/xml" />
 </jaxrs:extensionMappings>
 
    <jaxrs:serviceBeans> 
        <ref bean="addressService" /> 
    </jaxrs:serviceBeans> 
    
    <!-- <jaxrs:inInterceptors>
  <bean class="cn.sniper.ws.service.LoggingInterceptor"></bean>
 </jaxrs:inInterceptors> -->
</jaxrs:server>
</beans>

beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=
 xmlns:xsi=
 xmlns:context=
 xmlns:aop=
 xmlns:tx=
 xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 <context:component-scan base-package="cn.sniper.ws.service"></context:component-scan>

 <import resource="ws-services-context.xml"/>
</beans>

AddressService

package cn.sniper.ws.service;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import cn.sniper.ws.po.Address;
@SOAPBinding(style = Style.DOCUMENT)
@WebService(targetNamespace = "http://cn.sniper.ws.service")
public interface AddressService {
 
 public List<Address> getSuggestions(@WebParam(name="address")String address, @WebParam(name="max")int max);
 
}

AddressServiceImpl

package cn.sniper.ws.service;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import cn.sniper.ws.po.Address;
@Path(value="/")
@SOAPBinding(style = Style.DOCUMENT)
@WebService(
  serviceName = "address",
     portName = "address",
     targetNamespace = "http://cn.sniper.ws.service",
     endpointInterface = "cn.sniper.ws.service.AddressService")
public class AddressServiceImpl implements AddressService {
 
 @GET
    @Path("getSuggestions.query")
 public List<Address> getSuggestions(@QueryParam("address")String address, @QueryParam("max")int max) {
  List<Address> addressList = new ArrayList<Address>();
  addressList.add(new Address(1L, "admin-1"));
  addressList.add(new Address(2L, "admin-2"));
  
  return addressList;
 }
 
}

Address

package cn.sniper.ws.po;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
 * 注意,@XmlRootElement(name="addressVO")的name不要和属性的name重复,
 * 否则会导xml解析过程报错
 * @author audaque
 *
 */
@XmlRootElement(name="addressVO")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"id","address"})
public class Address implements Serializable {
 
 private static final long serialVersionUID = -1704617795954765535L;
 @XmlElement(name="id")
 private Long id;
 
 @XmlElement(name="address")
 private String address;
 public Address() {
 }
 
 public Address(Long id, String address) {
  this.id = id;
  this.address = address;
 }
 
 public Long getId() {
  return id;
 }
 public void setId(Long id) {
  this.id = id;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
 xmlns="http://java.sun.com/xml/ns/j2ee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
 <!-- 通过上下文参数指定spring配置文件的位置 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/beans.xml</param-value>
 </context-param>
  
   <!-- spring上下文载入器监听器,确保web服务器启动时,完成spring容器的初始化 ,放在了application范围中-->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <!-- cxf -->
 <servlet>
     <servlet-name>CXFServlet</servlet-name>
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
     <load-on-startup>2</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>CXFServlet</servlet-name>
     <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
</web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.sniper.ws</groupId>
  <artifactId>sniperWS</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>sniperWS Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <spring.version>3.1.1.RELEASE</spring.version>
 <struts.version>2.3.4.1</struts.version>
 <hibernate.version>3.6.9.Final</hibernate.version>
 <junit.version>4.8.1</junit.version>
  </properties>
  <dependencies>
   
   <!-- spring配置 -->
   <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${spring.version}</version>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-oxm</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <!-- 注解拦截,需要引入spring aop相关jar包 -->
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <!-- spring jdbc -->
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>${spring.version}</version>
 </dependency>
 
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-hibernate3</artifactId>
  <version>2.0.8</version>
 </dependency>
 
 <dependency>
  <groupId>cglib</groupId>
     <artifactId>cglib</artifactId>
     <version>2.2.2</version>
 </dependency>
 
 <!-- aspectj -->
 <dependency>  
  <groupId>org.aspectj</groupId>  
  <artifactId>aspectjrt</artifactId>  
  <version>1.7.4</version>  
 </dependency>
  
 <dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.7.4</version>
 </dependency>
 
 <dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjlib</artifactId>
  <version>1.6.2</version>
 </dependency>
 
 <!-- @ResponseBody 将数据转换成json的依赖包,如果没有依赖包,即使能够访问action,返回的时候也会报错 -->
 <!-- 解决:Could not find acceptable representation报错; 客户端报错:ajax not acceptable -->
 <!-- <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
 <dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.13</version>
 </dependency> -->
 
 <!-- cxf -->
 <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>apache-cxf</artifactId>
    <version>2.6.1</version>
    <type>pom</type>
   </dependency>
   <dependency>  
        <groupId>javax.ws.rs</groupId>  
        <artifactId>jsr311-api</artifactId>  
        <version>1.1.1</version>  
    </dependency>  
 
 <dependency>
  <groupId>net.sf.json-lib</groupId>
  <artifactId>json-lib</artifactId>
  <version>2.2.3</version>
  <classifier>jdk15</classifier>
 </dependency>
 
 <dependency>
  <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.3</version>
 </dependency>
 
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <build>
    <finalName>sniperWS</finalName>
  </build>
</project>
时间: 2024-08-05 23:03:03

CXF结合spring发布WS服务,含SOAP services、RESTful services的相关文章

cxf整合spring发布rest服务

1.创建maven web项目并添加依赖 pom.xml 1 <properties> 2 <webVersion>3.0</webVersion> 3 <cxf.version>3.2.5</cxf.version> 4 <spring.version>4.3.18.RELEASE</spring.version> 5 <jettison.version>1.4.0</jettison.version&

使用CXF框架,发布webservice服务,并使用客户端远程访问webservice

使用CXF框架,发布webservice服务,并使用客户端远程访问webservice  1. CXF介绍 :soa的框架    * cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache      * CxF的核心是org.apache.cxf.Bus(总线),类似于Spring的 ApplicationContext    * CXF默认是依赖于Spring的    * Apache CXF 发行包中的jar,如果全部放到lib中

CXF结合Spring 发布及调用接口遇到的问题

1. 报错BeanCreationException 异常可查看下面的错误,一般是缺少jar包导致 2. 使用cxf 3.0 以上的版本自动生成客户端代码,可能会报版本错误信息,所以尽量使用java 1.7及以上版本. 官网说明:The current plan is that CXF 3.1 will no longer support Java 6 and will require Java 7 or newer. Users are strongly encouraged to start

使用CXF和spring搭建webService服务

虽然下一个项目需要使用xfire,但是在查资料的过程中还是看到有不少地方都说cxf比xfire更好,cxf继承了xfire,但是不仅仅包含xfire,因此便也一起来尝试尝试.大概是有了xfire的经验吧,cxf的搭建比xfire快了许多. cxf的许多参数感觉和xfire差不多,因此便不做太多的解释,如果不明白的可以参考之前的xfire搭建来促进理解. 搭建过程如下: 1.使用eclipse创建一个maven项目,maven导包的pom.xml的整体内容如下: <project xmlns=&quo

使用aixs2发布ws服务

1.首先下载axis2.war文件,将里面的conf,lib,modules三个文件夹复制到项目的WEB-INF,删除掉lib里面的txt文件: 2.在web-inf下面建立services目录,并在service目录下面建立META-INF,然后再改目录下新建services.xml 3.开发java类: package xihuyu.service; public class { public String sayHello(String name) { return "hello &quo

Spring整合CXF之发布WebService服务

今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-spring.html 根据官方文档.我们把前面的实例用Spring整合CXF来处理下.会简化很多: 首先我们来建一个Maven项目 WebService_CXF 建好项目第一步,我们打开pom.xml 我们来添加下Spring支持: <!-- 添加Spring支持 --> <dependen

发布https类型的WS服务

使用JDK6+自带的发布ws服务Endpoint.publish 1.普通发布 import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; @WebService(serviceName="SendIdcManageService") @SOAPBinding(style=SOAPBinding.Style.R

So easy Webservice 8.spring整合CXF 发布WS

1.添加jar包(cxf的jar包中包含了spring的jar包),添加spring配置文件 2.web.xml中配置CXFServlet,过滤WS服务的地址 <!-- 配置CXFServlet,实现地址过滤的功能,项目启动时实例化 --> <servlet> <servlet-name>cxfServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFSer

使用CXF发布webservice服务及注意要点

一.概念 1.什么是webservice Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. 2.wsdl 网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言.为用户提供详细的接口说明书. 3.soap 简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子