Webservice01---快速的实现一个基于Jws的WebService项目

来源:互联网 发布:车主名单软件 编辑:程序博客网 时间:2024/06/01 08:49

1、服务器端建立

1.1、创建接口

package com.chb.service;import javax.jws.WebService;/** * 1.1、创建接口 */public interface IMyService {    public int add(int a, int b);    public int mins(int a, int b);}

1.2、创建实现类

package com.chb.service;import javax.jws.WebService;public class MyServiceImpl implements IMyService{    @Override    public int add(int a, int b) {        System.out.println(a + "+" + b + "=" + (a+b));        return a + b;    }    @Override    public int mins(int a, int b) {        System.out.println(a + "-" + b + "=" +(a-b));        return a - b;    }}

1.3、开启服务

package com.chb.service;import javax.xml.ws.Endpoint;public class MyServer {    public static void main(String[] args) {        //发布的地址        String address = "http://localhost:6666/ns";        Endpoint.publish(address,                 new MyServiceImpl());//实现的类}

1.3.1 启动报错:

报错:Exception in thread "main" java.lang.IllegalArgumentException: class com.chb.service.MyServiceImpl has neither @WebService nor @WebServiceProvider annotation    

1.3.2 、关注两个东西

    //SEI (Service EndPoint Interface)  服务提供的接口-->IMyService    //SIB (Service implemention Bean)   服务实现的Bean

1.3.3、接口与实现类需要添加下面注解

        //接口与实现类需要添加下面注解        @WebService        public interface IMyService {...}        @WebService(endpointInterface="com.chb.service.IMyService")        public class MyServiceImpl implements IMyService{...}

1.3.4、访问 http://localhost:9999/ns?wsdl, 注意后面一定要加?wsdl, 这就是我们公开给网上的某些接口。

这里写图片描述

1.3.5、我们通过解析这个wsdl, 就可以调用java的方法。不用使用new创建对象。

这里写图片描述

思考:IMyService iMyService = service.getPort(IMyService.class);

如果别人使用, 也需要有这个接口, 这样就太依赖于这个接口, 不可能别人使用你的服务, 还要寻找你要这个接口, 这样也无法跨平台。

问题: 依赖与IMservice, 需要一种方案: 可以通过wsdl生成本地的类, 生成的类不应该根据服务的平台, 而是根据自己的平台, wsdl可能是java, .net,或其他语言开发的, 我们需要解决这个问题。

2. 解决方案:wsimport的使用

这里写图片描述

就有了接口的类

2.1、新建一个项目,作为客户端,将wsimport生成的目录拷贝到src下, 可以看到生成了很多东西, 有了IMyService接口。

这里写图片描述

注意上面的MyServiceImplService不是IMyService的实现类, 而是javax.xml.ws.Service的实现类

 MyServiceImplService extends Service

2.2、MyServiceImplService提供一个很好的方法供我们获取IMService,

    /**     * @return     *     returns IMyService     */    @WebEndpoint(name = "MyServiceImplPort")    public IMyService getMyServiceImplPort() {        return super.getPort(new QName("http://service.chb.com/", "MyServiceImplPort"), IMyService.class);    }

2.3、获取IMyService,调用方法

package com.chb.client;import com.chb.service.IMyService;import com.chb.service.MyServiceImplService;public class TestClient {    public static void main(String[] args) {        MyServiceImplService msis = new MyServiceImplService();        //获取IMyService, 简单多了        IMyService iMyService = msis.getMyServiceImplPort();        System.out.println(iMyService.mins(12, 29));    }}

3、wsdl到底是什么

3.1、types: 用来定义访问的类型

这里写图片描述

SOAP (Simple Object Access Protocol), 如何传输SOAP, 就是通过SOAP Message

3.2、Message:SOAP, 请求一个消息, 返回一个消息, 所以要传输的消息两倍与服务提供的方法, 可能更多。

这里写图片描述

3.3、portType :接下来, 需要指明在服务器端,我们用哪个接口来进行操作。这就需要portType.

这里写图片描述

3.4、binding:
消息该以什么形式呈献给客户,
  有两种方式: style=”document” or style=”rpc”
消息以什么样的形式传递
  <soap:body use="literal"/>, 以xml形式传递。

这里写图片描述

3.5、 servcice : 指定服务所发布的名称

这里写图片描述

阅读全文
0 0