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

本文介绍如何使用Java搭建WebService服务器端并实现客户端调用。从接口创建到服务发布,再到客户端调用方法的步骤都进行了详细的说明。同时讨论了WSDL文件的作用及如何解析它来调用远程服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 : 指定服务所发布的名称

这里写图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值