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