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,我们在这个测试过中和生成客户端文件的过程中一定要注意:发布服务的类一定要运行!!!
好了,今天就到这。接下来我会陆续往服务中添加更多有趣的东西