WebService学习(一)

WebService学习(一),第1张

使用工具:

IDEA 2020.3.2、JDK1.8_64x

WebService介绍:

简单说   WebService 就是一个服务 ,别的程序能访问并使用这项在线服务。(提供服务和wsdl,调用解析你来搞)
api  就相当于一个别人编译好的类,你直接引用后使用(提供接口和服务,调用返回简单点);

常见的两种WebService处理方式:

1:基于WSDL / SOAP 的方式;

2:Rest 方式。

方式1是比较正统的,客户端调用必须先取得WSDL文件,然后生成调用的API才可以使用;方式2在后续说明。

本次学习使用 WSDL基本方式,在SpringBoot微服务中使用JWS(JAVA Web Service)发布webService,目标:实现一个简单例子 客户端和服务端的一次简单示例。

步骤:

1、使用IDEA创建SpringBoot工程+web

目录结构如下

2、测试新建SpringBoot web,在默认生成的DemoApplication同目录下新建TestController类,用注解@RestController标注,创建测试方法index,如下图:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping(value="/index")
    public String index(){
        return "Hello World!";
    }
}

启动项目,访问 http://localhost:8080/index,如显示 Hello World! 则标识正常

3、编写WebService接口 WebServiceInterface,使用jws的 WebService,WebMenthod,WebParam

package com.example.demo.webService.inter;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface WebServiceInterface {

    @WebMethod
    String hiWebService(@WebParam(name="HiWebService") String str);

}

 4、实现接口方法。并且在该类上使用javax.jws.WebService注解和org.springframework.stereotype.Service注解,是该类即是一个webService接口服务类又是作为一个可以被spring管理的bean;

package com.example.demo.webService.impl;

import com.example.demo.webService.inter.WebServiceInterface;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;

import javax.jws.WebService;

@WebService
@Service
public class WebServiceImpl implements WebServiceInterface{

    private Log log = LogFactory.getLog(WebServiceInterface.class);

    @Override
    public String hiWebService(String str) {
        String msg = "WebServiceImpl获取Str>>"+str;
        log.info(msg);
        return msg;
    }
}

 5、BeforeStartUp

        5.1、使用ApplicationContext事件机制来完成webService接口的自动发布。使用ApplicationListener监听ContextRefreshedEvent事件。ContextRefreshedEvent就是在ApplicationContext被初始化(所有的bean被成功装载,后处理bean被检测或成功激活,所有的singleton bean被实例化,ApplicationConte容器已就绪可用)或刷新时,该事件被发布。

        5.2、在webservice目录下新建一个类BeforeStartUp.java,实现ApplicationListene接口。

        5.3、重写onApplicationEvent方法。在该方法中发布webService服务。使用javax.xml.ws.Endpoint的publish方法发布。该方法有两个参数,第一个是要使用的地址和传输/协议的URI。URI必须使用SOAP 1.1 / HTTP 绑定。第二个参数是webService的接口实现类。

        5.4、该类也必须使用@Service,@Component或者@Configuration注解被spring管理,使其可以被自动装载。

package com.example.demo.webService;

import com.example.demo.webService.inter.WebServiceInterface;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;

import javax.xml.ws.Endpoint;

/**
 * 使用ApplicationContext事件机制来完成webService接口的自动发布。
 *
 * 使用ApplicationListener监听ContextRefreshedEvent事件。ContextRefreshedEvent就是在ApplicationContext被初始化(所有的bean被成功装载,后处理bean被检测或成功激活,所有的singleton bean被实例化,ApplicationConte容器已就绪可用)或刷新时,该事件被发布。
 *
 * 在webservice目录下新建一个类BeforeStartUp.java,实现ApplicationListene接口。
 *
 * 重写onApplicationEvent方法。在该方法中发布webService服务。使用javax.xml.ws.Endpoint的publish方法发布。该方法有两个参数,第一个是要使用的地址和传输/协议的URI。URI必须使用SOAP 1.1 / HTTP 绑定。第二个参数是webService的接口实现类。
 *
 * 该类也必须使用@Service,@Component或者@Configuration注解被spring管理,使其可以被自动装载。
 */
@Service
public class BeforeStartUp implements ApplicationListener {

    private Log log = LogFactory.getLog(BeforeStartUp.class);

    private static String address = "http://localhost:8002/ws/hello";

    @Autowired
    private WebServiceInterface webServiceInterface;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        Endpoint.publish(address,webServiceInterface);
        log.info("WebService 服务发布成功");
        log.info("wsdl地址:"+address+"?wsdl");
    }
}

6、启动服务,如下截图》》服务端启动成功

 

 7、客户端,同样SpringBoot工程

8、选择webService,选择generate java code from wsdl (或者 工程名字上右键,若都没有请查看 选不到 generate java code from wsdl)

9、编写Main方法进行调用 

package com.example.clientdemo.client;

import client.WebServiceImpl;
import client.WebServiceImplService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Run {

    private static Log log = LogFactory.getLog(Run.class);

    public static void main(String[] args) {
        WebServiceImpl service = new WebServiceImplService().getWebServiceImplPort();
        String str = service.hiWebService("Client:Hi webService!");
        log.info(str);
    }
}

 10、运行Main方法

源码:源码GitHub路径

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/721323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存