`

Spring集成Apache Cxf实现WebService

 
阅读更多

服务器端的实例是从网上找的,修改了Spring版本和CXF版本。

一、POM配置

通过maven管理项目,pom配置了所用的库。

<properties>

        <!-- spring版本号 -->

        <spring.version>4.0.6.RELEASE</spring.version>

        <cxf.version>3.1.8</cxf.version>

    </properties>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>3.8.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</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-web</artifactId>

<version>${spring.version}</version>

</dependency>

 

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-frontend-jaxws</artifactId>

<version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-bindings-soap</artifactId>

<version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-transports-http</artifactId>

<version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId>

<artifactId>cxf-rt-ws-security</artifactId>

<version>${cxf.version}</version>

</dependency>

<dependency>

    <groupId>org.codehaus.woodstox</groupId>

    <artifactId>stax2-api</artifactId>

    <version>3.1.1</version>

 

2、开发服务器端接口

复制代码
package com.moon.cxfWebservice.server;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface Greeting {
    public String greeting(@WebParam(name="username")String userName);
}
复制代码

然后开发实现类

复制代码
package com.moon.cxfWebservice.server;

import java.util.Calendar;

import javax.jws.WebService;

@WebService(endpointInterface="com.moon.cxfWebservice.server.Greeting")
public class GreetingImpl implements Greeting{

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

}
复制代码

至此,服务端的代码就开发完成了。

3、在web.xml和spring配置文件中配置

首先,在web.xml中,需配置servlet,如下图配置:

<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>/webservice/*</url-pattern>

  </servlet-mapping>

另外,还行配置spring相关的上下文监听,如:

context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/config/spring.xml</param-value>

  </context-param>

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  <filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>UTF-8</param-value>

    </init-param>

    <init-param>

      <param-name>forceEncoding</param-name>

      <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

 

在web.xml中,声明的spring的配置文件是spring.xml,所以,在Spring.xml中,还需要配置webservice相关的服务。

<bean id="greetingImpl" class="com.moon.cxfWebservice.server.GreetingImpl"/>

 <jaxws:endpoint id="greeting"  implementor="#greetingImpl"   address="/Greeting" />

 

<bean id="hello" class="com.cigna.cmc.cxf.service.impl.HelloWorldImpl" />

<jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld">

</jaxws:endpoint>

 

其中,address是访问的链接中对应该服务的标识。如访问helloworld的配置,访问的完整地址为:

http://localhost:9080/cxfWSServer/webservice/HelloWorld?wsdl

 

以上,服务器端的开发就完成了。

 

4、开发客户端

客户端的访问方式,通过查找资源,一共实现了三种,

第一种方式:

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(Greeting.class);
factory.setAddress("http://localhost:9080/cxfWSServer/webservice/Greeting?wsdl");

Greeting service = (Greeting) factory.create();

String name = service.greeting("白嘉轩先生");
System.out.println("********返回值="+name);

第二种访问方式,动态访问指定的方法:

String wsUrl = "http://localhost:9080/cxfWSServer/webservice/HelloWorld?wsdl";
DynamicClientFactory objDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
Client objClient = objDynamicClientFactory.createClient(wsUrl);

String method="sayHello";
Endpoint endpoint = objClient.getEndpoint();
QName opName = new QName(endpoint.getService().getName().getNamespaceURI(), method);
BindingInfo bindingInfo = endpoint.getEndpointInfo().getBinding();
if (bindingInfo.getOperation(opName) == null) {
   for (BindingOperationInfo operationInfo : bindingInfo.getOperations()) {
      if (method.equals(operationInfo.getName().getLocalPart())) {
         opName = operationInfo.getName();
         break;
      }
   }
}
try{
   Object[] object = objClient.invoke(opName, "白嘉轩","F");
   for(int i=0;i<object.length;i++){
      System.out.println("*********object="+object[i].toString());
   }

}catch (Exception e){
   e.printStackTrace();
}

 

第三种访问方式:

该访问方式是将需要访问的服务配置在Spring项目的配置文件中,之后通过配置文件找到对应的服务。

在Spring的配置文件中配置:

<jaxws:client id="helloWorld" serviceClass="com.cmdi.ws.HelloWorld"
address="http://localhost:9080/cxfWSServer/webservice/HelloWorld?wsdl"/>

其中,id的值为在加载了Spring配置文件后,通过id找到对应的服务。

serviceClass为该服务的接口类,应该是在客户端有一个该接口类文件,在服务器端有一个相同的实现类文件。address为访问服务的地址,且“?wsdl”可以不加上,经验证均可以正确调用webservice。

 

 此外,对于客户端需要访问的服务器端的服务,客户端都需要存在该服务的接口类,同时,客户端的接口类需要指明该服务的命名空间。如

@WebService(targetNamespace = "http://impl.service.cxf.cmc.cigna.com/")
public interface HelloWorld {
@WebResult(name = "String")
String sayHello(@WebParam(name = "name") String name,
                @WebParam(name = "sex") String sex);
  void test();
}

 

 targetNamespace指定了命名空间,根据观察,该命名空间应该是:

http://+该服务类在服务器端的完整路径的倒叙。

com.cigna.cmc.cxf.service.impl.HelloWorld 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Apache CXF2+Spring2.5轻松实现WebService

    Apache CXF和Spring提供了丰富的扩展点,可以集成如Spring Security来控制访问权限,使用Spring AOP来处理事务,以及通过CXF的拦截器机制来实现自定义的日志、验证等功能。 总结来说,Apache CXF 2与Spring 2.5的...

    Spring2+CXF实现webservice笔记

    ### Spring2 + CXF 实现 WebService 的关键知识点 #### 一、概述 在现代软件架构设计中,WebService 是一种非常重要的技术手段,它能够帮助开发者实现不同系统间的交互和服务共享。Spring 框架与 Apache CXF 结合...

    基于spring注解的cxf实现webservice

    总结,基于Spring注解的CXF实现Web服务,主要涉及Spring注解的使用、服务接口的定义、服务实现的创建、CXF与Spring的配置以及部署和测试过程。这种方式极大地简化了Web服务的开发,使得代码更加清晰,维护更方便。...

    spring集成cxf(webservice)

    ### Spring集成CXF(WebService) #### WebService概览 WebService是一种构建应用程序的普遍模型,能够跨平台、跨语言实现服务的交互与共享。它是一种自包含、自描述、模块化的应用,可以发布、定位并通过Web调用...

    spring整合cxf 实现webservice

    【Spring 整合 CXF 实现 WebService】是将 Apache CXF 框架与 Spring 框架结合,以创建、部署和管理 WebService 的一种方法。Apache CXF 是一个开源服务框架,它允许开发者创建和消费各种 Web 服务,而 Spring 提供...

    spring CXF集成,实现webservice(包含https)

    本文将详细讲解如何将Spring与CXF集成,以实现Web Service(包括HTTPS安全通信)。 首先,Spring是一个开源的Java平台,它提供了一个全面的编程和配置模型,用于简化Java应用的开发。Spring框架的核心特性包括依赖...

    spring_cxf实现webService

    基于CXF实现JAVA_WebService.doc Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services

    Spring+CXF 发布WebService服务

    在IT行业中,Spring框架和Apache CXF是两个非常重要的组件,它们在开发Web服务时扮演着关键角色。本文将深入探讨如何使用Spring和CXF来发布WebService服务。 首先,Spring是一个开源的Java平台,它提供了全面的编程...

    基于CXF实现WebService开发.pdf

    在具体技术实现上,CXF使用了Spring框架,从而使得WebService的开发能够利用Spring的依赖注入、声明式事务等特性,增强了应用的可维护性和扩展性。 总结来说,Apache CXF是一个功能强大的WebService开发框架,它...

    springboot+cxf实现webservice示例

    springboot+cxf实现webservice示例 &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-web &lt;!-- CXF ...

    源码-springboot+cxf实现webservice服务端

    ### 源码分析:Spring Boot + CXF 实现WebService服务端 #### 一、概述 随着企业级应用之间的交互需求日益增长,跨平台、跨语言的服务调用变得尤为重要。WebService作为一种成熟且广泛采用的技术标准,能够很好地...

    CXF实现webService

    本篇文章将深入探讨CXF在实现Web服务,包括服务端和客户端方面的应用,以及它如何与Spring框架无缝集成。 一、CXF简介 CXF源自XFire项目,后来并入Apache基金会,成为其顶级项目。CXF支持多种Web服务标准,如SOAP...

    在Spring工程里利用CXF实现webservice的demo

    在Spring工程中,利用Apache CXF实现Web服务(WebService)是一项常见的任务,它允许应用程序通过网络交换数据和服务。本教程将深入探讨如何在Spring环境中集成并使用CXF来创建一个简单的WebService示例。 首先,...

    利用cxf实现webservice

    【标题】:“利用CXF实现WebService” 在Java世界中,CXF是一个强大的开源框架,用于构建和开发Web服务。它支持多种Web服务标准,包括SOAP、RESTful API以及WS-*协议栈。CXF使得开发者能够方便地创建和消费Web服务...

    maven - spring4.1.6和cxf3.0.8 WebService整合代码

    在本文中,我们将深入探讨如何将Spring 4.1.6与Apache CXF 3.0.8集成,以创建一个基于Web Service的应用程序。这个示例中的具体应用是通过一个名为"HelloWorld"的服务来展示的,其Web Service地址为`...

    基于spring+cxf实现用户文件传输的webservice

    基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...

    spring+cxf 开发webservice

    综上所述,这个项目为Java开发者提供了一个使用Spring和CXF构建Web服务的起点,涵盖了从基础架构到具体实现的多个层次,有助于快速启动Web服务开发,并且能够在MyEclipse环境中无缝集成,方便进行进一步的定制和扩展...

Global site tag (gtag.js) - Google Analytics