服务器端的实例是从网上找的,修改了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 CXF和Spring提供了丰富的扩展点,可以集成如Spring Security来控制访问权限,使用Spring AOP来处理事务,以及通过CXF的拦截器机制来实现自定义的日志、验证等功能。 总结来说,Apache CXF 2与Spring 2.5的...
### Spring2 + CXF 实现 WebService 的关键知识点 #### 一、概述 在现代软件架构设计中,WebService 是一种非常重要的技术手段,它能够帮助开发者实现不同系统间的交互和服务共享。Spring 框架与 Apache CXF 结合...
总结,基于Spring注解的CXF实现Web服务,主要涉及Spring注解的使用、服务接口的定义、服务实现的创建、CXF与Spring的配置以及部署和测试过程。这种方式极大地简化了Web服务的开发,使得代码更加清晰,维护更方便。...
### Spring集成CXF(WebService) #### WebService概览 WebService是一种构建应用程序的普遍模型,能够跨平台、跨语言实现服务的交互与共享。它是一种自包含、自描述、模块化的应用,可以发布、定位并通过Web调用...
【Spring 整合 CXF 实现 WebService】是将 Apache CXF 框架与 Spring 框架结合,以创建、部署和管理 WebService 的一种方法。Apache CXF 是一个开源服务框架,它允许开发者创建和消费各种 Web 服务,而 Spring 提供...
本文将详细讲解如何将Spring与CXF集成,以实现Web Service(包括HTTPS安全通信)。 首先,Spring是一个开源的Java平台,它提供了一个全面的编程和配置模型,用于简化Java应用的开发。Spring框架的核心特性包括依赖...
基于CXF实现JAVA_WebService.doc Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services
在IT行业中,Spring框架和Apache CXF是两个非常重要的组件,它们在开发Web服务时扮演着关键角色。本文将深入探讨如何使用Spring和CXF来发布WebService服务。 首先,Spring是一个开源的Java平台,它提供了全面的编程...
在具体技术实现上,CXF使用了Spring框架,从而使得WebService的开发能够利用Spring的依赖注入、声明式事务等特性,增强了应用的可维护性和扩展性。 总结来说,Apache CXF是一个功能强大的WebService开发框架,它...
springboot+cxf实现webservice示例 <groupId>org.springframework.boot <artifactId>spring-boot-starter <groupId>org.springframework.boot <artifactId>spring-boot-starter-web <!-- CXF ...
### 源码分析:Spring Boot + CXF 实现WebService服务端 #### 一、概述 随着企业级应用之间的交互需求日益增长,跨平台、跨语言的服务调用变得尤为重要。WebService作为一种成熟且广泛采用的技术标准,能够很好地...
本篇文章将深入探讨CXF在实现Web服务,包括服务端和客户端方面的应用,以及它如何与Spring框架无缝集成。 一、CXF简介 CXF源自XFire项目,后来并入Apache基金会,成为其顶级项目。CXF支持多种Web服务标准,如SOAP...
在Spring工程中,利用Apache CXF实现Web服务(WebService)是一项常见的任务,它允许应用程序通过网络交换数据和服务。本教程将深入探讨如何在Spring环境中集成并使用CXF来创建一个简单的WebService示例。 首先,...
【标题】:“利用CXF实现WebService” 在Java世界中,CXF是一个强大的开源框架,用于构建和开发Web服务。它支持多种Web服务标准,包括SOAP、RESTful API以及WS-*协议栈。CXF使得开发者能够方便地创建和消费Web服务...
在本文中,我们将深入探讨如何将Spring 4.1.6与Apache CXF 3.0.8集成,以创建一个基于Web Service的应用程序。这个示例中的具体应用是通过一个名为"HelloWorld"的服务来展示的,其Web Service地址为`...
基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...
综上所述,这个项目为Java开发者提供了一个使用Spring和CXF构建Web服务的起点,涵盖了从基础架构到具体实现的多个层次,有助于快速启动Web服务开发,并且能够在MyEclipse环境中无缝集成,方便进行进一步的定制和扩展...