【JAVA】CXF+Spring上的webservice

  WebService可以将应用程序转换为网络应用程序。Web Services 可以被其他应用程序利用。基本的 Web Services 平台是 XML+HTTP。其作用是可以自主的开放接口给互联网中其他的用户,通过WSDL的描述方法来调用。
  在JAVA应用程序中,实现WebService应用的方法有一个叫做CXF框架。服务器端通过WSDL描述暴露其应用服务的接口,客户端采用SOAP协议生成请求,通过HTTP中的POST,发送给web服务器,web服务器将SOAP请求转发给WebService处理,WebService生成对应的SOAP应答后,再又通过web服务器通过HTTP应答的方式发回给客户端。
	20170801修改,工程文件增加了文件上传与下载功能。

【开发环境】

1、java开发工具,jdk-8u131-windows-x64.exe。
2、spring开发IDE,sts-3.8.1.RELEASE。
3、CXF框架工具包,apache-cxf-2.1。
4、tomcat7.0工具包,tomcat7.0 for win64。
5、本文用到的代码工程为两个,GitHub仓库,服务端  和  客户机。
以上为windows环境,linux环境请联系博主,或自行搜索下载。

【开发流程】

1、安装好JDK环境、spring开发IDE、tomcat7.0。
2、在spring中部署tomcat7.0环境,如图1所示,新增一个服务,将tomcat目录加入Server环境中,这里采用tomcat7.0。
【JAVA】CXF+Spring上的webservice_第1张图片
图1 springIDE中tomcat配置
3、新建Dynamic Web Project工程,命名为helloCXF,此处工程文件夹名影响后续web地址访问,web.xml勾选上。如图2所示。
【JAVA】CXF+Spring上的webservice_第2张图片
图2 新建web工程
4、部署服务器端,包含创建HelloWorld.java接口,HelloWorldImpl.java为服务实现类,User.java为用户数据类。配置文件applicationContext.xml,和web.xml文件。CXF框架工具包放入WebContent->WEB-INF->lib目录下。如图3所示。
【JAVA】CXF+Spring上的webservice_第3张图片
图3 开发工程目录结构一览
5、部署服务端,选中工程目录右键Run As - Run On Server,点finish,工程即部署于本地的tomcat服务器中。如图4所示。
【JAVA】CXF+Spring上的webservice_第4张图片
图4 启动tomcat并部署工程
6、浏览器访问地址 http://localhost:8080/helloCXF/webservice/HelloWorld?wsdl 即可,出现WSDL的描述语言。
其中地址结构为http://服务器端地址:tomcat端口号/工程目录名/webservice/接口名称?wsdl。

7、客户端,run javaApplication -> HelloWorldClient.java即可。这里的客户机的接口包,采用wsimport工具将wsdl转化而来。客户jar包为helloInterface.jar。具体操作见文件 WSDL生成jar的批处理.bat 。

【开发代码】

//HelloWorld.java
/**
 * @created time:2017年7月25日,下午1:52:06
 * @author:chixh
 * @file:HelloWorld.java
 */
package com.demo;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;
/**
 * 服务点接口
 * @author chixh
 *
 */
@WebService
public interface HelloWorld {
	String sayHi(@WebParam(name="text")String text);
	String sayHiToUser(User user);
	String[] SayHiToUserList(List userList);
}

//HelloWorldImpl.java
/**
 * @created time:2017年7月25日,下午1:59:14
 * @author:chixh
 * @file:HelloWorldImpl.java
 */
package com.demo;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;
/**
 * 服务实现类
 * @author chixh
 *
 */
@WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld")
public class HelloWorldImpl implements HelloWorld{
	
	Map users = new LinkedHashMap<>();
	
	@Override
	public String sayHi(String text) {
		return "Hello "+text;
	}

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

	@Override
	public String[] SayHiToUserList(List userList) {
		String [] result =new String[userList.size()];
		int i =0;
		for (User u : userList) {
			result[i] ="Hello "+u.getName();
			i++;
		}
		return result;
	}
	
}

//User.java
/**
 * @created time:2017年7月25日,下午1:57:58
 * @author:chixh
 * @file:User.java
 */
package com.demo;

public class User {
	private String name;
	private String description;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
}

//applicationContext.xml


	
	
	
	
	
	
	
	
	
	
		
		
	


//web.xml


	
	
		index.jsp
	
	
	
		contextConfigLocation
		WEB-INF/classes/applicationContext.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	
		CXFServlet
		
		CXFServlet
		org.apache.cxf.transport.servlet.CXFServlet
		1
	
	
		
		CXFServlet
		/webservice/*
	

//HelloWorldClient.java
/**
 * @created time:2017年7月25日,下午2:09:00
 * @author:chixh
 * @file:HelloWorldClient.java
 */
package com.demo;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloWorldClient {
	public static void main(String[] args) {
		//在应用配置文件中解析client字段。
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		HelloWorld client = (HelloWorld) context.getBean("client");
		//客户端产生两个user数据
		User user1 = new User();
		user1.setName("Tony");
		user1.setDescription("test");
		User user2 = new User();
		user2.setName("freeman");
		user2.setDescription("test");
		List userList = new ArrayList();
		userList.add(user1);
		userList.add(user2);
		//将数据通过bean的方式应用到服务端中去
		String[] res = client.SayHiToUserList(userList);
		System.out.println(res[0]);
		System.out.println(res[1]);

	}
}

//WSDL生成jar的批处理.bat

md D:\spring\workspace\ClientHelloCXF\wsdl\bin\
md D:\spring\workspace\ClientHelloCXF\wsdl\src\

wsimport  -keep  -s D:\spring\workspace\ClientHelloCXF\wsdl\src\ -d D:\spring\workspace\ClientHelloCXF\wsdl\bin\ -verbose http://localhost:8080/helloCXF/webservice/HelloWorld?wsdl

cd D:\spring\workspace\ClientHelloCXF\wsdl\bin\

jar -cvf helloInterface.jar com\


cd D:\spring\workspace\ClientHelloCXF\wsdl\src\

jar -cvf helloInterface_source.jar com\


copy D:\spring\workspace\ClientHelloCXF\wsdl\bin\helloInterface.jar D:\spring\workspace\ClientHelloCXF\WebContent\WEB-INF\lib
copy D:\spring\workspace\ClientHelloCXF\wsdl\src\helloInterface_source.jar D:\spring\workspace\ClientHelloCXF\WebContent\WEB-INF\lib
pause

【程序结果】

服务端WSDL内容,如图5所示。
【JAVA】CXF+Spring上的webservice_第5张图片
图5 服务端WSDL展示结果
客户端返回结果,如图6所示。
【JAVA】CXF+Spring上的webservice_第6张图片
图6 客户端返回结果

你可能感兴趣的:(Java,java,webservice,CXF,WSDL,SOAP)