Uninote
Uninote

WebService简介

  • WebService使运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成
  • 根据WebService规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据
  • Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能

WebService原理

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术,通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册

  • Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)

  • Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)

  • Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)

  • 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)

  • web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)

XML

  • (Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是SOAP的基础

SOAP

  • (Simple Object Access Protocol)简单对象存取协议。是通信协议
  • 当用户通过UDDI找到你的WSDL描述文档后,他通过SOAP调用你建立的Web服务中的一个或多个操作
  • SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP

WSDL

  • (Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。

UDDI

  • (Universal Description, Discovery, and Integration)是一种描述文档来引导系统查找相应服务的机制
  • UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息,采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

WebService实例(JWS)

服务端实现

  1. 开发一个webservice业务接口
public interface HelloWebService {
    String hello(String name);
}
  1. 实现类,类实现@WebService ,方法实现 @WebMethod。
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class HelloWebServiceImpl implements HelloWebService {
    @WebMethod
    @Override
    public String hello(String name) {
        String str = "hello:" + name;
        System.out.println(str);
        return str;
    }
}
  1. 暴露类
import javax.xml.ws.Endpoint;

public class PublishWebService {
    public static void main(String args[]) {
        HelloWebService helloWebService = new HelloWebServiceImpl();
        String address = "http://localhost:8000/hellowebservice";     //发布到的地址
        Endpoint.publish(address, helloWebService);
        System.out.println("WebService发布成功");
    }
}
//访问http://localhost:8000/hellowebservice?wsdl

客户端调用

public class TestWebService {
    public static void main(String[] args) {
        HelloWebServiceImplService service = new HelloWebServiceImplService();
        HelloWebServiceImpl hello = service.getHelloWebServiceImplPort();
        hello.hello("xxx");
    }
}

AXIS调用远程的WebService

此时,为了避免远程调用时参数传递null,服务端实现类方法上的参数应加上

@WebParam(name = "name", mode = WebParam.Mode.IN, targetNamespace = "http://yuansu.com/")

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
import java.net.URL;

public class TestWebService {
    public static void main(String[] args) {
        //命名空间 即在wsdl中的targetNamespace="http://yuansu.com/"
        String soapaction = "http://yuansu.com/";
        String endpoint = "http://localhost:8000/hellowebservice";
        String method = "hello";
        String parameterName = "name";
        String parameterValue = "xxx";
        String result = "";
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
            // 设置远程调用路径
            call.setTargetEndpointAddress(new URL(endpoint));
            //指定调用命名空间下的方法
            call.setOperationName(new QName(soapaction, method));
            // 设置参数名 :参数名 ,参数类型:String, 参数模式:'IN' or 'OUT'
            call.addParameter(new QName(soapaction, parameterName), XMLType.XSD_STRING, ParameterMode.IN);
            // 设置返回值类型
            call.setReturnType(XMLType.XSD_STRING);
            call.setUseSOAPAction(true);
            // 远程调用
            result = (String) call.invoke(new Object[]{parameterValue});
        } catch (Exception var8) {
            result = "";
        }
        System.out.println(result);
    }
}

Java注解

Spring多线程-TaskExecutor任务调度

点赞(1) 阅读(675) 举报
目录
标题