`

Spring3.2 + cxf1.7.3整合

 
阅读更多
参考:http://tsinglongwu.iteye.com/blog/832704
测试调试工具介绍
1.SoapUI1.6 http://webservices.ctocio.com.cn/tips/263/7817763.shtml
2.TestMaker http://webservices.ctocio.com.cn/tips/263/7817763_2.shtml
3.WebServiceStudio http://demo.tc/Post/529
SoapUI支持eclipse插件

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>com.pandy</groupId>
	<artifactId>webservice</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>webservice Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<spring.version>3.2.1.RELEASE</spring.version>
		<tomcat.version>2.1-SNAPSHOT</tomcat.version>
		<junit.version>3.8.1</junit.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<!-- Spring jars -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</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-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-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-asm</artifactId>
			<version>3.1.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>2.2.2</version>
		</dependency>

		<!-- CXF jars -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-core</artifactId>
			<version>2.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-api</artifactId>
			<version>2.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http</artifactId>
			<version>2.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>2.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.neethi</groupId>
			<artifactId>neethi</artifactId>
			<version>3.0.0</version>
		</dependency>


	</dependencies>
	<build>
		<finalName>webservice</finalName>
	</build>
</project>


提供服务端
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:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

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

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

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>


非注解:applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://cxf.apache.org/jaxws 
	http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
       <!--  心版本去掉cxf/cxf-extension-soap.xml-->
	<!-- <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> -->

	<bean id="hello" class="com.webservices.impl.HelloWorldImpl" />
	<jaxws:endpoint id="helloWorld" implementor="#hello"
		address="/HelloWorld" />
</beans>

<jaxws:endpoint>有三个属性id, implementor和address。
id”指定这个Bean在Spring上下文中唯一的标识。
implementor”指定了这个Web Service的实现类。
address”指定了服务在Web服务器上发布的地址。这个地址可以包含ip和端口的完整地址,也可以是只包含相对路径的地址。

注解:applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:cxf="http://cxf.apache.org/core"
	xmlns:context="http://www.springframework.org/schema/context"
	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">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<context:annotation-config />
	<context:component-scan base-package="com" />

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

注意: 同时应该在实现类加上@Component注解.


接口:使用@WebService注解,表明这个接口就是对外提供的服务.
package com.webservices;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.webservices.bean.User;
/**
 * 将要用来发布的接口
 * @author pandy
 *
 */
@SuppressWarnings("restriction")
@WebService
public interface IHelloWorld {
	// 加入WebParam注解,以保证xml文件中参数名字的正确性
	String sayHi(@WebParam(name = "text") String text);
	String sayHiToUser(User user);

}



实现类:使用@WebService(endpointInterface = "com.webservices.IHelloWorld", serviceName = "HelloWorld")注解,表明这个是IHelloWorld服务的实现类,并提供发布到外部,服务名字是HelloWorld
package com.webservices.impl;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.jws.WebService;
import com.webservices.IHelloWorld;
import com.webservices.bean.User;
/**
 * 接口的实现类
 * @author pandy
 *
 */
@SuppressWarnings({ "restriction" })
@WebService(endpointInterface = "com.webservices.IHelloWorld", serviceName = "HelloWorld")
public class HelloWorldImpl implements IHelloWorld {
	Map<Integer, User> users = new LinkedHashMap<Integer, User>();

	@Override
	public String sayHi(String text) {
		System.out.println("sayHi called");
		return "Hello " + text;
	}

	@Override
	public String sayHiToUser(User user) {
		System.out.println("sayHiToUser called");
		users.put(users.size() + 1, user);
		return "Hello " + user.getName();
	}

}

也可以使用@Component去注解实现类,才能使用注解方式.


运行工程,进入:http://localhost:8080/webservice/HelloWorld?wsdl ,得到的wsdl
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.webservices.com/"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http"
	xmlns:ns1="http://webservices.com/" name="HelloWorld" targetNamespace="http://impl.webservices.com/">
	<wsdl:import
		location="http://localhost:8080/webservice/HelloWorld?wsdl=IHelloWorld.wsdl"
		namespace="http://webservices.com/"></wsdl:import>
	<wsdl:binding name="HelloWorldSoapBinding" type="ns1:IHelloWorld">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="sayHi">
			<soap:operation soapAction="" style="document" />
			<wsdl:input name="sayHi">
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output name="sayHiResponse">
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="sayHiToUser">
			<soap:operation soapAction="" style="document" />
			<wsdl:input name="sayHiToUser">
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output name="sayHiToUserResponse">
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="HelloWorld">
		<wsdl:port binding="tns:HelloWorldSoapBinding" name="HelloWorldImplPort">
			<soap:address location="http://localhost:8080/webservice/HelloWorld" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

则表示服务端的webservice已经部署成功,就等着客户端来访问.

客户端:
pom.xml, 类似服务端的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>com.pandy</groupId>
	<artifactId>webserviceclient</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>webserviceclient Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<spring.version>3.2.1.RELEASE</spring.version>
		<tomcat.version>2.1-SNAPSHOT</tomcat.version>
		<junit.version>3.8.1</junit.version>
	</properties>

	<dependencies>
		......
	</dependencies>
	<build>
		<finalName>webserviceclient</finalName>
	</build>
</project>


使用命令得到基本的类:
wsdl2java  -d /mnt/d/vmware_shared_folder/workspace/webserviceclient/src/main/java -p com.websercices.client -frontend jaxws21 http://localhost:8080/webservice/HelloWorld?wsdl

applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
	xmlns:jaxws="http://cxf.apache.org/jaxws" 
	xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://cxf.apache.org/jaxws 
	http://cxf.apache.org/schema/jaxws.xsd">

	<bean id="client" class="com.websercices.client.IHelloWorld" factory-bean="clientFactory"
		factory-method="create" />
		
	<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
		<property name="serviceClass" value="com.websercices.client.IHelloWorld" />
		<property name="address" value="http://localhost:8080/webservice/HelloWorld" />	
	</bean>
</beans>

注意:
1. org.apache.cxf.jaxws.JaxWsProxyFactoryBean要知道提供服务的接口和URL.
2. <property name="address" value="http://localhost:8080/webservice/HelloWorld" />中的/HelloWorld要与服务器端applicationContext.xml中的<jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />的address属性对应。

建立一个测试类:
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.websercices.client.IHelloWorld;  
public class Test {  
    public static void main(String[] args) {  
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-client.xml");  
        IHelloWorld server = (IHelloWorld) ctx.getBean("client");  
        String result = server.sayHi("猪头!");  
        System.out.println(result); 
    }  
} 


运行客户端测试类,得到结果: Hello 猪头!
分享到:
评论

相关推荐

    spring4+cxf3+maven3整合客户端与服务端

    本项目整合了Spring 4、CXF 3和Maven 3,旨在创建一个服务端和客户端的完整解决方案。以下是关于这三个组件及其整合方式的详细说明: **Spring 4** Spring是一个开源的Java框架,主要用于简化企业级应用开发。...

    idea + spring4.3.7.RELEASE+cxf3.1.0整合+客户端调用

    本教程将围绕"idea + spring4.3.7.RELEASE + cxf3.1.0"的整合进行详细讲解,旨在帮助开发者理解如何在IDEA(IntelliJ IDEA)环境中搭建一个基于Maven的Spring MVC项目,并结合Apache CXF实现Web服务的消费与提供。...

    myBatis+spring+cxf 框架简单整合(包jar)

    本案例中,我们将讨论如何将MyBatis、Spring和CXF这三个关键框架整合在一起,以构建一个功能强大的Web服务。首先,让我们逐一了解这些框架的核心概念。 MyBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架...

    spring3+cxf2.7 整合jar包

    "spring3+cxf2.7 整合jar包"的标题表明,这个压缩包包含的是Spring 3.x版本与CXF 2.7版本整合所需的一系列jar包。这样的整合使得开发者能够在SpringMVC环境中方便地使用CXF来实现服务的发布和调用,提高应用的灵活性...

    Spring+CXF+MyBatis整合代码

    本项目是关于"Spring+CXF+MyBatis"的整合代码实现,旨在提供一个可直接运行的服务端解决方案。接下来,我们将深入探讨这三个核心组件及其整合过程中的关键知识点。 **Spring框架** Spring是Java领域的一个重量级...

    Spring3整合CXF2.7.10

    **Spring3整合CXF2.7.10详解** 在Java世界中,Spring框架和Apache CXF都是极为重要的工具。Spring作为一个全面的轻量级应用框架,提供了强大的依赖注入、AOP(面向切面编程)等功能,而CXF则是一个优秀的服务端和...

    spring+cxf 整合jar包

    在IT行业中,Spring框架和CXF服务框架的整合是一个常见的任务,主要用于构建高效、灵活的分布式服务系统。本文将深入探讨Spring与CXF整合的核心概念、步骤以及它们各自的功能。 **Spring框架** 是一个开源的应用...

    spring3+cxf 整合jar包

    Spring3和CXF是两个非常重要的...总的来说,"spring3+cxf2.7 整合jar包"是一个非常实用的工具,它降低了Spring和CXF整合的复杂性,加速了开发进程。如果你需要在Java项目中使用Web服务,这个资源无疑是一个很好的起点。

    spring+mybatis+cxf整合

    本文将详细解析"spring+mybatis+cxf整合"这一主题,包括这三个框架的基本概念、如何整合以及整合后能实现的功能。 首先,Spring是一个开源的Java平台,它简化了开发过程,提供了强大的依赖注入(DI)和面向切面编程...

    spring4+mybatis3+webservice+cxf框架整合

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"spring4+mybatis3+webservice+cxf框架整合"就是一个典型的解决方案。这个项目结合了四个关键的技术组件,以构建一个强大的后端系统。 首先,Spring 4是Java...

    CXF2.1.3+spring3.0+struts2.3.4

    【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...

    idea+maven+spring+cxf

    idea+maven+spring+cxf

    spring+srpingmvc+mybatis+cxf

    SSM框架是Java Web开发中常用的三大组件:Spring、SpringMVC和Mybatis的组合,它们各自负责不同的职责,协同工作以构建出高效、松耦合的Web应用程序。在这个项目中,开发者进一步集成了Apache CXF框架,用于发布Web...

    spring4+cxf3

    本文将详细探讨"spring4+cxf3"整合的相关知识点,包括Spring 4.1.8和CXF 3.1.3的特性、整合过程以及实际应用场景。 **Spring 4.1.8** Spring 4.1.8是Spring框架的一个稳定版本,它引入了诸多改进和新功能。以下是...

    spring + cxf + mybatis整合

    "Spring + CXF + MyBatis整合"是指将这三个框架结合在一起,创建一个具备完整功能的后端系统,包括业务逻辑处理、Web服务提供和数据库交互。下面将详细介绍这个整合过程中的关键知识点: 1. **Spring配置**:首先,...

    maven3.04+spring3.2.8+cxf2.7.12+tomcat7实现RESTFul风格的webservice服务

    自己在网上找了很多cxf实现rest风格...现在把源码发上来,java代码只有12K,主要是lib里面的全部jar包(spring、cxf等全部的jar包), 文章地址:http://blog.csdn.net/lxn39830435731415926/article/details/39448887

    使用Eclipse+Maven+Spring+CXF构建的WebService服务

    Web项目中基于Maven与Spring整合的WebService之cxf的实现⬇️ 详情请参考如下链接: https://locqi.github.io/locqi.com/2018/09/05/Eclipse+Maven+Spring+CXF-create-WebService/

    Spring+CXF+tomcat开发webservice

    这个项目"Spring+CXF+tomcat开发webservice"旨在教你如何利用这些技术搭建一个完整的Web服务环境,包括服务端和服务端客户端的实现。 **Spring** 是一个广泛使用的Java企业级应用开发框架,它提供了依赖注入(DI)...

    Spring+CXF+MyBatis整合客户端代码

    "Spring+CXF+MyBatis整合客户端代码"意味着这个项目结合了这三个框架,以实现一个完整的客户端解决方案。下面我们将详细探讨如何整合这三个框架以及它们在客户端代码中的应用。 1. **Spring框架**:在客户端代码中...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    3. 接下来,我们需要实现Restful API和WebService API接口,使用Spring Boot的Restful API和CXF框架来实现学生信息的增删改查操作。 4. 最后,我们需要测试Restful API和WebService API接口,确保其正常工作。 结论...

Global site tag (gtag.js) - Google Analytics