WebService学习心得

本文介绍了WebService的核心概念,包括XML、SOAP协议和WSDL文档。重点讲解了SOAP消息的封装结构,并讨论了如何使用Java的@WebService注解发布服务以及通过不同方式调用服务,包括自动生成客户端代码和HttpURLConnection直接调用。
摘要由CSDN通过智能技术生成

WebService学习心得01——webservice服务端及客户端开发

1.定义
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。
依据Web Service规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。
简单来说,WebService技术就是通过网络来交换数据的一种技术。
2.相关概念
XML:交换数据时使用的数据结构
SOAP协议:简单对象访问协议,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。
WSDL文档:用于描述网络服务的一种语言。
3.SOAP协议是如何传输XML数据结构的?
SOAP协议是通过将SOAP消息绑定到HTTP上来传输数据的。
SOAP协议主要包含四个部分:
封装,它定义了一个框架,用来封装XML数据,它描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。
编码规则,它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
RPC表示,它定义了用于表示远程过程调用和应答的协定。
绑定,定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。
4.作为简单使用者,我们应该关心哪一点?
作为简单使用者,我们主要关系SOAP协议的封装部分,即SOAP消息的协议结构。
5.协议结构
SOAP消息结构:

<?xml version="1.0"?>
<soap:Envelope
 xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
  soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    <soap:Header>
    </soap:Header>
    <soap:Body>
        <soap:Fault>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

6.如何发布服务?
首先使用@WebService注解定义一个服务,然后使用EndPoint的publish方法发布服务。

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class DemoService {
    public String HelloWorld(String name) {
        return "HelloWorld: " + name;
    }
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/HelloWorld", new DemoService());
    }
}   

7.如何调用服务?
(1)自动生成客户端代码方式
这里不做介绍
(2)service编程方式调用
客户端代码:

import java.io.IOException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class DemoClient {

    public static void main(String[] args) throws IOException {
        //设置WSDL文档地址
        URL wsdlUrl = new URL("http://localhost:8080/HelloWorld?wsdl");
        //创建服务名称
        //参数1:对应wsdl命名空间
        //参数2:对应wsdl服务名
        QName serviceName = new QName("http://service.demo.webservice.com/", "DemoServiceService");
        Service service = Service.create(wsdlUrl, serviceName);
        //获取服务实现类
        //参数:对应wsdl端口名
        DemoService client = service.getPort(DemoService.class);
        //调用方法
        String message = client.HelloWorld("q");
        System.out.println(message);
        }

    }

实现类接口:

import javax.jws.WebService;

@WebService(targetNamespace = "http://service.demo.webservice.com/")
public interface DemoService {
    String HelloWorld(String name);
}

WSDL相关元素
这里写图片描述
(3)HttpURLConnection调用方式
使用http协议发送和获取soap消息

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class DemoClient {

    public static void main(String[] args) throws IOException {
        URL url = new URL("http://localhost:8080/HelloWorld");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("content-type", "text/xml;charset=UTF-8");
        connection.setDoInput(true);
        connection.setDoOutput(true);
        String soapXML = getXML("q");
        OutputStream out = connection.getOutputStream();
        out.write(soapXML.getBytes());
        int responseCode = connection.getResponseCode();
            if(200 == responseCode) {
            InputStream in = connection.getInputStream();
            InputStreamReader reader = new InputStreamReader(in);
            BufferedReader buffer = new BufferedReader(reader);
            StringBuilder sb = new StringBuilder();
            String temp = null;
            while (null != (temp = buffer.readLine())) {
                sb.append(temp);
            }
            System.out.println(sb.toString());
            buffer.close();
            reader.close();
            in.close();
        }
        out.close();
    }

    public static String getXML(String name) {
    //ser为命名空间别名
        String soapXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.demo.webservice.com/\">"
                       + "  <soapenv:Header/>" 
                       + "  <soapenv:Body>" 
                       + "      <ser:HelloWorld>" 
                       + "         <arg0>" + name + "</arg0>"
                       + "      </ser:HelloWorld>" 
                       + "  </soapenv:Body>" 
                       + "</soapenv:Envelope>";
        return soapXML;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值