您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 1浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

宝哥大数据 发布时间:2017-09-23 22:32:02 ,浏览量:1

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”消息以什么样的形式传递  , 以xml形式传递。

这里写图片描述

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

这里写图片描述

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.1755s