CXF的Spring注解配置及使用

使用的cxf包版本为 cxf-2.6.1.jar         官方下载地址:CXF下载地址

web.xml配置

    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>

spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <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="webServicesAgent" class="org.apache.cxf.spring.remoting.Jsr181HandlerMapping">
        <property name="urlPrefix"><value>/</value></property>
    </bean>
</beans>

定义接口(代码片段)

@WebService
public interface MemberService {

    /**
     *  Function:获取企业账号信息
     *  @author **
     *  @param memId
     *  @return
     */
    public Member getMemAccount(int memId);
}

接口实现(代码片段) 数据开启了GZIP压缩

@Component
@WebService(serviceName = "MemberService", endpointInterface = "com.webservice.member.service.MemberService")
@SOAPBinding(style = Style.RPC)
@org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.apache.cxf.transport.common.gzip.GZIPInInterceptor","org.apache.cxf.transport.common.gzip.GZIPOutInterceptor" })
public class MemberServiceImpl implements MemberService {
    @Autowired
    private MemberDao memberDao;    

    @Override
    public Member getMemAccount(int memId) {
        return memberDao.getMemAccount(memId);
    }

}

访问地址 http://localhost:8080/ws/MemberService?wsdl

客户端调用(定义一个BaseService类)

public class BaseService {
    public Object getService(String path[]){
        try{
            Class<?> c=Class.forName(path[0]);
            String address = path[1].replace("{0}",SiteProperty.getSiteSession().serviceUrl);
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            factory.setServiceClass(c);
            factory.setAddress(address);
            Object obj = factory.create();
            Client client = ClientProxy.getClient(obj);
            Endpoint endpoint = client.getEndpoint();
            endpoint.getInInterceptors().add(new GZIPInInterceptor());
            endpoint.getOutInterceptors().add(new GZIPOutInterceptor());
            return obj;
        }catch(Exception e){
            //e.printStackTrace();
        }
        return null;
    }
}

客户端Service实现类,继承BaseService(片段)

@Service("memberManagerService")
public class MemberManagerServiceImpl extends BaseService implements MemberManagerService{
    /**
         * 企业管理Service
         */
        public static final String MEMBER_SERVICE[]={"com.webservice.member.service.MemberService","http://{0}/ws/MemberService?wsdl"};

    private MemberService getMemberService(){
        service =(MemberService)getService(Constants.SERVICE.MEMBER_SERVICE);
        return service;
    }

    /**
     *  Function:获取企业账号信息
     *  @author **
     *  @param memId
     *  @return
     */
    public MemberLogin getMemAccount(int memId){
        return getMemberService().getMemAccount(memId);
    }

}
时间: 2024-10-01 16:04:22

CXF的Spring注解配置及使用的相关文章

详解spring注解配置启动过程_java

       最近看起spring源码,突然想知道没有web.xml的配置,spring是怎么通过一个继承于AbstractAnnotationConfigDispatcherServletInitializer的类来启动自己的.鉴于能力有限以及第一次看源码和发博客,不到之处请望谅~ 我用的IDE是IntelliJ IDEA,这个比myEclipse看源码方便一点,而且黑色背景挺喜欢.然后项目是在maven下的tomcat7插件运行.spring版本是4.3.2.RELEASE.  如果写过纯注

spring注解配置以文本方式导出

问题描述 spring配置是基于注解的方式可不可把注解配置以xml或者文本格式导出以便方便测试和查错这个估计是要系统运行时候才能导出..还有hibernate的注解可不可以导出成为xml后者文本? 解决方案 解决方案二:注解还可以导出啊?学习了!解决方案三:不是很明白解决方案四:没听太明白?解决方案五:路过--

在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢?

问题描述 在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢? 在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢?在配置文件中是这样的注解配置时这样的@Service(""userService"")说说理由哦. 解决方案 一般应用性开发使用注解就可以.它较xml配置方式的优势在于省去了xml复杂的配置,而且不需要维护两套内容(xml配置方式需要维护service类和xml文件).但是如果需要修改相关内容,注

基于注解的Spring MVC(所需jar包,web.xml配置,Spring文件配置,@Controller,@RequestMapping,@RequestParam,model填参,EL取值)

1.添加jar 2.web.xml配置: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLoca

Spring自定义配置Schema可扩展(一)_java

简述 本教程主要介绍如何扩展Spring的xml配置,让Spring能够识别我们自定义的Schema和Annotation. 这里我们要实现的功能如下,首先让Spring能够识别下面的配置. <std:annotation-endpoint /> 这个配置的要实现的功能是,配置完后能够让Spring扫描我们自定义的@Endpoint注解.并且根据注解自动发布WebService服务.功能未完全实现,作为扩展Spring的教程,起一个抛砖引玉的作用. 创建项目 首先需要创建一个Java项目,这里

Spring自定义配置Schema可扩展(二)_java

命名空间支持 要实现命名空间支持,需要继承自NamespaceHandlerSupport. package com.codestd.spring.cxf.config.schema; import org.springframework.beans.factory.xml.NamespaceHandlerSupport; import com.codestd.spring.cxf.config.EndpointBeanProcessor; /** * 处理命名空间 * @author jaun

网络相册开发(4)——Spring中配置JPA

在src/META-INF下添加persistence.xml 1.<?xml version="1.0" encoding="UTF-8"?>2.<persistence xmlns="http://java.sun.com/xml/ns/persistence"3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4. xsi:schemaLoca

javaweb-关于spring注解问题。

问题描述 关于spring注解问题. Spring哪句注解可以代替织入bean例如 applicationContent.xml的 <bean id=""contentDao"" class=""com.itschool.dao.ContentDao""></bean> 这个类 public class ContentDao {} 到了这个类里面,头顶要写哪个注解才不需要到配置文件织入啊,我试过写@Co

hibernate-一个Spring4Hibernate4的开源项目,spring注解了接口,这是什么意思?

问题描述 一个Spring4Hibernate4的开源项目,spring注解了接口,这是什么意思? //Service @Service @Transactional public class UserLogonLogService extends BaseService { @Autowired private UserLogonLogDao userLogonLogDao; ... //Dao @Repository public interface UserLogonLogDao exte