`
zhao_rock
  • 浏览: 191365 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

CXF集成Spring

    博客分类:
  • cxf
阅读更多

最近调研了对webservice实现比较好的框架,觉得Apache的CXF不错.
做了一个简单的技术预研,其中主要包括2方面:1.与Spring的集成,2.安全性方面即WS-Security
首先与Spring的集成可以通过ContextLoaderListener去装配bean
在WS-Security方面可以与WSS4J集成
WSS4J支持多种模式:
XML Security:1.XML Signature 2.XML Encryption
Tokens:1.Username Tokens 2.Timestamps 3.SAML Tokens

做个了小的集成demo项目,项目的包结构如下:

 

 

服务端部分

1. 下面是web.xml的配置,主要配置cxf核心cxfServlet以及Spring的ContextLoaderListener

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
  <display-name>CXF_Spring_INTG_Test</display-name>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
   classpath:cxf.xml
 </param-value>
  </context-param>
  <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>
  <listener>
    <listener-class>
   org.springframework.web.util.Log4jConfigListener
 </listener-class>
  </listener>
  <!-- configuration unique Web app root for log4j -->
  <context-param> 
      <param-name>webAppRootKey</param-name> 
      <param-value>cxf.root</param-value> 
  </context-param> 
</web-app>

 

2. cxf.xml配置

主要包括两部分:wss4j安全验证及webservice的管理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
 xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://cxf.apache.org/jaxws
  http://cxf.apache.org/schemas/jaxws.xsd">
 <bean id="saaj" class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
 
 <bean id="wss4j" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor" >
  <constructor-arg>
   <map>
    <entry key="action" value="UsernameToken" />
    <entry key="passwordType" value="PasswordText" />
    <entry key="passwordCallbackClass" value="com.test.ws.handler.ServerWsAuthHandler" />
   </map>
  </constructor-arg>
 </bean>
 <jaxws:endpoint implementor="com.test.service.ITestWSImpl" address="/TestWS">
  <jaxws:inInterceptors>
   <ref bean="saaj" />
   <ref bean="wss4j" />
  </jaxws:inInterceptors>
 </jaxws:endpoint>
</beans>

 

3. Server端进行WSS4J处理的Handler ServerWsAuthHandler,做了一个简单的密码为明文的验证

public class ServerWsAuthHandler implements CallbackHandler {
 private String passwd = "test";
 
 @Override
 public void handle(Callback[] callbacks) throws IOException,
   UnsupportedCallbackException {
  for (int i = 0; i < callbacks.length; i++) {
   WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];  
   pc.setPassword(passwd);
  }
 }
}

 

4. WebService的接口ITestWS.java

package com.test.service;
import javax.jws.WebService;
@WebService
public interface ITestWS {
 public String sayHello(String name);
}

 

5.  WebService的实现类ITestWSImpl.java

package com.test.service;
import javax.jws.WebService;
@WebService(endpointInterface="com.test.service.ITestWS"
 ,serviceName="ITestWS")
public class ITestWSImpl implements ITestWS{

 @Override
 public String sayHello(String name) {
  return "Hello "+name;
 }
}

 

客户端部分

1. Client端进行WSS4J处理的Handler ClientWsAuthHandler.java

package com.test.ws.handler;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class ClientWsAuthHandler implements CallbackHandler {
 private String passwd = "test";
 @Override
 public void handle(Callback[] callbacks) throws IOException,
   UnsupportedCallbackException {
  for (int i = 0; i < callbacks.length; i++) {
   WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
   pc.setPassword(passwd);
  }
 }
}

2. Client端进行调用的测试类ClientTest

public class ClientTest {
private static List list = new ArrayList(); 
 static{
  Map<String, Object> outProps = new HashMap<String, Object>();
  outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN);
  outProps.put(WSHandlerConstants.USER, "admin");
  //密码类型明文测试使用,还有很多如WSConstants.PASSWORD_DIGEST
  outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
  //outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_DIGEST);
  // 指定在调用远程ws之前触发的回调函数ClientWsAuthHandler,其实类似于一个拦截器
  outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,ClientWsAuthHandler.class.getName());
  // 添加cxf安全验证拦截器
  list.add(new SAAJOutInterceptor());
  list.add(new WSS4JOutInterceptor(outProps));
 }
 
 public static void main(String[] args){
     //客户端采用动态创建及调用的方式
  JaxWsDynamicClientFactory  factory = JaxWsDynamicClientFactory.newInstance();
     Client client =factory.createClient("http://localhost:8080/Spring_CXF/ws/TestWS?wsdl");
     client.getOutInterceptors().addAll(list);
     try {
   String name = "Tom";
      Object[] param = new Object[]{name};
      Object[] obj =client.invoke("sayHello",param);
      String rtnStr = (String) obj[0];
      System.out.println(rtnStr);
     } catch (Exception e) {
      e.printStackTrace();
     }
 }
}

 

  • 大小: 16 KB
0
0
分享到:
评论
1 楼 somefuture 2015-12-10  
集成spring?spring现在没有xml了,怎么改呢

相关推荐

    CXF集成spring hibernate

    【CXF集成Spring Hibernate】是将三个核心的Java技术——CXF、Spring和Hibernate整合到一个应用程序中的实践。这样的集成可以构建出强大的企业级服务,其中CXF用于提供Web服务,Spring作为应用的管理和依赖注入容器...

    apache-cxf集成spring基本包

    这个"apache-cxf集成spring基本包"是用于将Apache CXF与Spring MVC框架结合使用的必要组件。Spring MVC是Spring框架的一部分,它为构建Web应用程序提供了一种模型-视图-控制器(MVC)结构。通过集成CXF,开发者可以...

    Cxf集成Spring的WebService接口的配置文档

    Cxf集成Spring的WebService接口的配置文档

    cxf集成spring

    【标题】"cxf集成spring"涉及的知识点主要围绕着两个关键组件——Apache CXF和Spring框架的整合。Apache CXF是一个开源服务框架,它允许开发者创建和消费各种Web服务,而Spring则是一个广泛使用的Java企业级应用开发...

    CXF集成Spring示例_附源码

    自己总结的一个CXF集成Spring的例子,可以直接运行,附源码! 程序的详细说明请参照博客文档 http://blog.csdn.net/sunbaojin5213344/article/details/8931600

    cxf集成Spring的restful WebService接口

    总之,通过将CXF与Spring框架集成,我们可以利用Spring的强大功能来管理和配置服务,同时利用CXF的灵活性来快速开发RESTful接口。这种组合为Java开发者提供了一个高效且可扩展的解决方案,用于构建现代化的、基于...

    cxf 集成spring例子java代码

    在本文中,我们将深入探讨如何将Apache CXF与Spring框架集成,通过具体的Java代码实例来阐述这一过程。CXF是一个开源服务框架,它允许开发者创建和消费Web服务,而Spring框架则是一个强大的应用开发框架,提供了依赖...

    CXF整合spring的客户端和服务端

    - **cxfConnection**:这个名字暗示这可能是一个关于CXF连接配置的文件,可能包含了CXF与Spring集成的具体配置,例如服务的URL、认证信息、传输协议等。 - **cxfConsumer**:此文件名可能指的是CXF消费者,即...

    cxf集成Spring的restful WebService接口以Json形式表现

    将CXF与Spring集成,可以充分利用两者的优势,实现高效、灵活的RESTful服务。 本项目主要展示了如何使用CXF和Spring构建一个能够以JSON格式返回数据的RESTful WebService接口。JSON(JavaScript Object Notation)...

    cxf整合spring

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF和Spring都是Java生态系统中的关键组件。本文将深入探讨如何将CXF与Spring框架整合,以构建高效且灵活的Web服务解决方案。 首先,让我们了解CXF。...

    cxf+spring webservice demo client

    【描述】:“这个是cxf 集成spring 的webservice的例子 供大家参考” Apache CXF与Spring的集成使得开发和部署Web服务变得更加便捷。通过Spring,我们可以利用其依赖注入(DI)和面向切面编程(AOP)特性,更方便地...

    CXF-Spring相关jar包

    在【压缩包子文件的文件名称列表】中,"cxf-spring"可能包含的是用于集成CXF与Spring的必要jar包,如cxf-spring-integration.jar,这个文件通常包含了CXF与Spring集成所需的类和资源,使得开发者能够在Spring环境下...

    WebService的CXF整合Spring

    Spring还提供了一个强大的集成环境,可以方便地与其他框架和库进行整合,包括CXF。 将CXF与Spring整合的主要目的是利用Spring的管理能力来配置和控制CXF组件,例如服务端点、客户端代理等。这样可以实现更细粒度的...

    cxf+spring实现webservice

    8. **集成测试**:利用Spring Test和CXF的模拟测试工具,可以方便地进行Web服务的单元测试和集成测试。 9. **性能优化**:可以通过调整CXF的配置,例如缓存策略、线程池大小等,优化Web服务的性能。 10. **监控与...

    cxf+spring所需的jar包

    同时,Spring的事务管理可以与CXF服务无缝集成,确保服务操作的事务一致性。 4. jar包解析: 压缩包中的jar文件可能包括了CXF的核心库、Spring框架的核心库、以及它们之间的适配器和依赖。例如: - CXF的相关jar...

    cxf与spring集成

    现在,我们将深入探讨如何将CXF与Spring集成,以构建高效、灵活的Web服务。 首先,让我们理解CXF的核心特性。CXF支持多种Web服务规范,如SOAP、RESTful以及WS-*家族,如WS-Security、WS-ReliableMessaging等。它还...

    cxf_spring 相关 jar

    在IT行业中,CXF和Spring框架的整合是创建高效、灵活的Web服务的重要途径。...这种集成方式也允许你在同一项目中使用Spring的其他功能,如数据库连接池、事务管理和安全控制,从而构建完整的分布式系统。

    CXF与Spring 2.5整合

    2. **CXF的Spring支持**:CXF提供了对Spring的深度集成,可以通过Spring的XML配置或注解来定义和管理Web服务。例如,使用`&lt;jaxws:endpoint&gt;`标签创建一个基于JAX-WS的服务端点,或者使用`&lt;jaxrs:server&gt;`创建基于JAX...

Global site tag (gtag.js) - Google Analytics