webservice

MonsterCoder

我们先看下webservice有关知识点:

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

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

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

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

然后我们做一个快速demo,来感受下webservice

package com.cyy.service;

import javax.jws.WebService;

@WebService
public interface IHelloWorld {
    public String syaHello();
}
package com.cyy.service;

import javax.jws.WebService;

@WebService(endpointInterface="com.cyy.service.IHelloWorld")
public class HelloWorldImpl implements IHelloWorld {

    @Override
    public String syaHello() {
        return "helloWorld";
    }

}
package com.cyy.service;

import javax.xml.ws.Endpoint;

public class HelloWorld {

    public static void main(String[] args) {
        //确定一个在网上发布的地址address
        String address = "http://localhost:6666/hello";
        //发布
        Endpoint.publish(address, new HelloWorldImpl());
    }

}

package com.cyy.service;


import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;


public class TestClient {


public static void main(String[] args) {
try {
// 创建访问wsdl服务地址的url
URL url = new URL("http://localhost:6666/hello?wsdl");
// 通过Qname指明服务的具体信息
QName name = new QName("http://service.cyy.com/", "HelloWorldImplService");
Service service = Service.create(url, name);
IHelloWorld ih = service.getPort(IHelloWorld.class);
System.out.println(ih.syaHello());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

}

这里其实会有一个问题,我们用这种方式去使用接口的时候,我们依然需要依赖IHelloWorld接口,这个就很不合理了,不应该依靠对方的服务平台而是需要依赖自己的服务平台

闲话不多说,其实我们可以通过wsimport轻松的导入我们的webservice,首先我们先来看一下里面的命令

生成客户端代码只需要一条命令(ps:java6版本之后都有这个命令)

-d:指定文件输出位置
f:/webservice/demo01:我在f盘建的目录
-keep:保留生成文件
wsimport -d f:/webservice/demo01/ -keep -verbose http://localhost:6666/hello?wsdl

我们去文件夹中看一下是否生成了java文件

 

我们新建一个项目webservice_demo02将生成的文件导入到我们的项目中,再把测试类放进去运行下

 

OK,我们在这个测试过中和生成客户端文件的过程中一定要注意:发布服务的类一定要运行!!!

好了,今天就到这。接下来我会陆续往服务中添加更多有趣的东西

原文地址:https://www.cnblogs.com/MonsterCui-Code/p/8834996.html