在springboot微服务中使⽤JWS发布webService
发布时间:2018-11-22
技术:Java+spring+maven
概述
在springboot微服务中使⽤JWS发布webService,在服务启动时⾃动发布webservice接⼝。
详细
代码下载:
⼀、创建springboot项⽬
1.新建⼀个springboot项⽬,不需要添加任何依赖。
ample.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RequestMapping("/")
public String hello(){
return "hello spring boot";
}
}
⼆、编写webservice接⼝
1. 在ample.demo路径下新建webservice⽬录,并在该⽬录下新建webservice接⼝TestService.java,编写⼀个webService接⼝⽅
法。
2. 在该接⼝上使⽤javax.jws.WebServcie注解;在⽅法上使⽤javax.jws.WebMethod注解。
ample.demo.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface TestService {
@WebMethod
String hiWebService(@WebParam(name = "hi") String s);
}
3.在相同路径下新建TestService接⼝的实现类TestServiceImpl.java,实现接⼝⽅法。并且在该类上使⽤javax.jws.WebService注解和org.springframework.stereotype.Service注解,是该类即是⼀个webService接⼝服务类⼜是作为⼀个可以被spring管理的bean。
ample.demo.webservice;
import org.apachemons.logging.Log;
import org.apachemons.logging.LogFactory;
import org.springframework.stereotype.Service;
import javax.jws.WebService;
@WebService
@Service
public class TestServiceImpl implements TestService{
private Log log = Log(TestServiceImpl.class);
@Override
public String hiWebService(String s) {
String msg = "获取内容:"+s;
log.info(msg);
return msg;
}
}
三、启动配置
1. 使⽤ApplicationContext事件机制来完成webService接⼝的⾃动发布。
使⽤ApplicationListener监听ContextRefreshedEvent事件。ContextRefreshedEvent就是在ApplicationContext被初始化(所有的bean 被成功装载,后处理bean被检测或成功激活,所有的singleton bean被实例化,ApplicationConte容器已就绪可⽤)或刷新时,该事件被发布。
2. 在webservice⽬录下新建⼀个类BeforeStartUp.java,实现ApplicationListene接⼝。
3. 重写onApplicationEvent⽅法。在该⽅法中发布webService服务。使⽤l.ws.Endpoint的publish⽅法发布。该⽅法有两个参
数,第⼀个是要使⽤的地址和传输/协议的URI。URI必须使⽤SOAP 1.1 / HTTP 绑定。第⼆个参数是webService的接⼝实现类。
4. 该类也必须使⽤@Service,@Component或者@Configuration注解被spring管理,使其可以被⾃动装载。
ample.demo.webservice;
import org.apachemons.logging.Log;
import org.apachemons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import t.ApplicationListener;
import t.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;
l.ws.Endpoint;
webservice用户名密码调用@Service
public class BeforeStartUp implements ApplicationListener<ContextRefreshedEvent>{
private Log log = Log(BeforeStartUp.class);
// @Value("${spring.ws.address}")
private static String address = "localhost:8002/ws/hello";
@Autowired
private TestService testService;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
Endpoint.publish(address,testService);
log.info("webService 服务发布成功");
log.info("wsdl地址:"+address+"?wsdl");
}
}
四、启动应⽤,⾃动发布
1. 启动应⽤程序,观察控制台⽇志。出现如下⽇志即表⽰服务发布成功。
点击wsdl地址即可在浏览器上查看该webService的wsdl的内容。
由于webService是跨平台的。只要通过该wsdl⽂件就可以⽣成相应平台上的客户端或者服务端代码。
五、⽣成客户端代码(使⽤的是IDEA编辑器),通过客户端访问webservice接⼝
1. 新建⼀个Java项⽬。
2. 右击client,选择webService,选择generate java code from wsdl
3.
4.点击ok即可⽣成客户端代码。调⽤接⼝跟平常写程序调⽤⽅法没什么两样。⽅法在TestServiceImpl中,获取TestServiceImpl对象的⽅法在TestServcieImplService中。在main⽅法中调⽤:
package main.java;
import main.client.TestServiceImpl;
import main.client.TestServiceImplService;
public class Test {
public static void main(String[] args){
TestServiceImpl service = (new TestServiceImplService()).getTestServiceImplPort();
String s = service.hiWebService("hi webService!");
System.out.println(s);
}
}
六、运⾏main⽅法、查看接⼝调⽤
客户端:
说明接⼝已经成功调⽤。
服务端:
七、项⽬结构
本例⼦分为两部分,有客户端,也有webservice端,如下所⽰:
代码下载:
注:本⽂著作权归作者,由demo⼤师发表,拒绝转载,转载需要作者授权
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论