WebService笔记一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sugar_map/article/details/80656735

本文的核心内容:WebService三要素、开发一个WebService程序、CXF本地版

一:WebService

 WebService,即网络服务,是一种跨编程语言、跨操作系统、跨平台的远程调用技术。

应用实例:360导航的天气预报信息等。

 

WebService的三要素

WSDL: 网络服务的定义语言(Web Service Definition Language ),使用XML用以描述WebService服务信息(服务名、服务提供的功能及其实现类、参数、响应类型),通俗理解WSDL是WebService的使用说明书

SOAP简单对象访问协议(Simple Object Access Protocol),是一种简单的基于HTTP+XML的数据交换协议。SOAP=HTTP(协议)+XML(数据格式)。

UDDI(不重要):目录服务(Universal Description, Discovery and Integration )。企业可以将自己提供的WebService注册在UDDI,也可以使用别的企业在UDDI注册的WebService服务,从而达到资源共享,促进全球经济合作。



二:使用WebService开发第一个程序。


服务的提供方:

提供服务接口+服务接口的实现


接口源码:

import javax.jws.WebService;
import java.util.ArrayList;
/**
 * Created by Maps on 2018/6/11.
 * @WebService服务标记接口
 */
@WebService
public interface JAXService {
	//返回值类型不能为接口  【ArrayList接口的实现类】
	public ArrayList<String> getInfo(String key);
}


接口实现类源码:

import com.jaxws.service.JAXService;
import javax.jws.WebService;
import java.util.ArrayList;
/**
 * Created by Maps on 2018/6/11.
 * @WebService服务标记接口实现类
 */
@WebService
public class JAXServiceImpl  implements JAXService{
	@Override
	public ArrayList<String> getInfo(String key) {
		ArrayList<String> list=new ArrayList<String>();
		if("101".equals(key)){
			list.add("name=Jack");
			list.add("age=12");
			list.add("sex=man");
		}else if("102".equals(key)){
			list.add("name=Tom");
			list.add("age=13");
			list.add("sex=man");
		}else{
			list.add("name=Jane");
			list.add("age=23");
			list.add("sex=woman");
		}
		return list;
	}
}


发布服务类源码:

import com.jaxws.service.JAXService;
import com.jaxws.service.impl.JAXServiceImpl;
import javax.xml.ws.Endpoint;
/**
 * Created by Maps on 2018/6/11.
 */
public class MyService {
	public static void main(String[] args) {
		//创建服务对象
		JAXService jaxService=new JAXServiceImpl();
		//发布服务
		//参数1: ws的发布地址   参数2:服务对象
		Endpoint.publish("http://localhost:9999/ws",jaxService);
		System.out.println("服务发布成功!!");
		//服务说明书网址 http://localhost:9999/ws?wsdl
	}
}



发布服务,并生成wsdl服务说明


1:首先通过浏览器访问服务说明书



2:WSDL详解



服务的接收方:

根据wsdl服务说明,生成符合当前语言的客户端代码



将生的.Java文件引入程序



编写客户端代码,完成服务调用【法一】

/**
 * Created by Maps on 2018/6/11.
 */
public class ClientBootstrap {
	public static void main(String[] args) {
		//1:服务名称对象
		JAXServiceImplService jaxServiceImplService=new JAXServiceImplService();
		//2:根据服务名称对象获取功能实现类对象
		JAXServiceImpl jaxService=jaxServiceImplService.getJAXServiceImplPort();
		//3:调用服务方法 获取返回值 完成WebSerivce的远程调用
		List<String> list=jaxService.getInfo("102");
		for (String str:list) {
			System.out.println(str);
		}
	}
}

【法二】

import com.jaxws.client.JAXServiceImpl;
import org.junit.Test;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;
import java.util.List;
/**
 * Created by Maps on 2018/6/11.
 */
public class ClientTest {
	@Test
	public  void method ()throws  Exception{
		//1:创建服务对象
		Service service=Service.create(new URL("http://localhost:9999/ws?wsdl"),
				new QName("http://impl.service.jaxws.com/","JAXServiceImplService"));
		//2:通过服务对象获取服务功能对象
		JAXServiceImpl jaxService=service.getPort(JAXServiceImpl.class);
		//3:通过接口完成 WebService的调用
		List<String> list=jaxService.getInfo("101");
		for (String str:list) {
			System.out.println(str);
		}
	}
}


三:SOAP 1.1协议

SOAP 1.1协议的请求方式:POST

SOAP 1.1协议的请求和响应的共同标签:

<s:envelope>

<s:body>


四、Apache CXF简介


 Apache CXF 是一个开源的 web service 框架

支持多种协议(SOAP 1.1、1.2、RESTFul HTTP 、 WS-I BasicProfile、WS-Security)等 。

CXF 大大简化了 web service 的编程,Spring 进行无缝集成


接口与接口实现类与上面一致。


使用cxf发布服务【本地版】

import com.jaxws.service.JAXService;
import com.jaxws.service.impl.JAXServiceImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.junit.Test;

/**
 * Created by Maps on 2018/6/12.
 */
public class CXF_Test {
	
	public static void main(String[] args){
		//1. 构建基于java api for xml ws工厂bean对象
		JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
		//2. ws服务的网络地址
		factoryBean.setAddress("http://localhost:9999/ws");
		//3. 指定ws服务接口
		factoryBean.setServiceClass(JAXService.class);
		//4. 指定ws服务接口的实现类
		factoryBean.setServiceBean(new JAXServiceImpl());
		//5. 发布ws服务
		factoryBean.create();
		System.out.println("服务发布成功!等待客户端调用......");
	}
}

CXF编写客户端代码,完成服务调用

import com.jaxws.client3.JAXService;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.junit.Test;
import java.util.List;
/**
 * Created by Maps on 2018/6/11.
 */
public class ClientTest {
	@Test
	public  void cxfTest()throws  Exception{
		//1. 构建代理工程bean
		JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
		// 绑定wsdl url地址
		factoryBean.setAddress("http://localhost:9999/ws?wsdl");
		//2. 获取服务接口对象
		JAXService jaxService=factoryBean.create(JAXService.class);
		//3. ws远程调用
		List<String> list= jaxService.getInfo("101");
		for (String str : list) {
			System.out.println(str);
		}
	}
}





猜你喜欢

转载自blog.csdn.net/Sugar_map/article/details/80656735
今日推荐