使用SpringBoot调用Web Service接口

一、什么是Web Service

Web Service是一种基于Web的技术,允许两个应用程序之间进行交互,而无需了解对方应用程序的语言、操作系统和网络协议。Web Service采用标准的XML消息机制,实现跨平台、跨语言和跨网络的通信。

二、SpringBoot框架

SpringBoot是一种基于Spring框架的开发方式,通过简化配置文件的方式,使得我们可以快速地构建Spring应用程序。SpringBoot直接嵌入Tomcat容器,可以直接运行成为一个独立的应用程序。

三、调用Web Service接口的流程

使用SpringBoot调用Web Service接口,通常需要经过以下几个步骤:

1、导入WebService客户端

在pom.xml文件中加入WebService客户端的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

2、创建Web Service客户端代理类

使用JaxWsProxyFactoryBean类创建Web Service客户端代理类:

@Configuration
public class WebServiceConfig {

    @Bean(name = "webServiceTemplate")
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        webServiceTemplate.setMessageSender(httpUrlConnectionMessageSender());
        return webServiceTemplate;
    }

    @Bean(name="httpUrlConnectionMessageSender")
    public HttpUrlConnectionMessageSender httpUrlConnectionMessageSender() {
        return new HttpUrlConnectionMessageSender();
    }

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.example.demo");
        return marshaller;
    }

    @Bean(name="testServiceClient")
    public TestService testServiceClient(Jaxb2Marshaller marshaller) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(TestService.class);
        factory.setAddress("http://localhost:8080/services/TestService");
        factory.setServiceName(new QName("http://example.com/", "TestServicePort"));
        factory.setEndpointName(new QName("http://example.com/", "TestServiceSoap"));
        factory.setBindingId(SOAPBinding.SOAP11HTTP_BINDING);
        factory.setUnmarshaller(marshaller);
        factory.setMarshaller(marshaller);

        Object obj = factory.create();
        return (TestService) obj;
    }

}

3、调用Web Service接口

在控制器中使用Web Service客户端代理类调用Web Service接口:

@Controller
public class TestController {

    @Autowired
    private TestService testServiceClient;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        TestRequest request = new TestRequest();
        request.setParam("test");
        TestResponse response = testServiceClient.test(request);
        return response.getResult();
    }

}

四、示例代码

下面是一个完整的Demo代码:

1、创建Web Service服务端

创建一个Java项目,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

创建接口TestService:

@WebService
public interface TestService {
    @WebMethod(operationName = "test")
    TestResponse test(@WebParam(name = "request") TestRequest request);
}

创建请求类TestRequest:

@XmlRootElement(name="TestRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestRequest implements Serializable {

    private static final long serialVersionUID = 1L;

    private String param;

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }

}

创建响应类TestResponse:

@XmlRootElement(name="TestResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    private String result;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

}

实现TestService接口:

@WebService(endpointInterface = "com.example.demo.TestService")
@Component
public class TestServiceImpl implements TestService {

    @Override
    public TestResponse test(TestRequest request) {
        TestResponse response = new TestResponse();
        String result = "Hello " + request.getParam();
        response.setResult(result);
        return response;
    }

}

2、创建SpringBoot应用程序客户端

创建一个SpringBoot项目,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

编写启动类:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

配置WebService客户端:

@Configuration
public class WebServiceConfig {

    @Bean(name = "webServiceTemplate")
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        webServiceTemplate.setMessageSender(httpUrlConnectionMessageSender());
        return webServiceTemplate;
    }

    @Bean(name="httpUrlConnectionMessageSender")
    public HttpUrlConnectionMessageSender httpUrlConnectionMessageSender() {
        return new HttpUrlConnectionMessageSender();
    }

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.example.demo");
        return marshaller;
    }

    @Bean(name="testServiceClient")
    public TestService testServiceClient(Jaxb2Marshaller marshaller) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(TestService.class);
        factory.setAddress("http://localhost:8080/services/TestService");
        factory.setServiceName(new QName("http://example.com/", "TestServicePort"));
        factory.setEndpointName(new QName("http://example.com/", "TestServiceSoap"));
        factory.setBindingId(SOAPBinding.SOAP11HTTP_BINDING);
        factory.setUnmarshaller(marshaller);
        factory.setMarshaller(marshaller);

        Object obj = factory.create();
        return (TestService) obj;
    }

}

编写控制器:

@Controller
public class TestController {

    @Autowired
    private TestService testServiceClient;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        TestRequest request = new TestRequest();
        request.setParam("test");
        TestResponse response = testServiceClient.test(request);
        return response.getResult();
    }

}

五、总结

本文介绍了如何使用SpringBoot调用Web Service接口的方法,从Web Service的基本概念、SpringBoot框架、调用Web Service接口的流程和示例代码四个方面进行了详细的阐述。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/283169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 08:07
下一篇 2024-12-22 08:07

相关推荐

  • Python Web开发第三方库

    本文将介绍Python Web开发中的第三方库,包括但不限于Flask、Django、Bottle等,并讨论它们的优缺点和应用场景。 一、Flask Flask是一款轻量级的Web…

    编程 2025-04-29
  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • Web程序和桌面程序的区别

    Web程序和桌面程序都是进行软件开发的方式,但是它们之间存在很大的区别。本文将从多角度进行阐述。 一、运行方式 Web程序运行于互联网上,用户可以通过使用浏览器来访问它。而桌面程序…

    编程 2025-04-29
  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • Python操作Web页面

    本文将从多个方面详细介绍Python操作Web页面的技巧、方法和注意事项。 一、安装必要的库 在Python中操作Web页面,需要用到一些第三方库。 pip install req…

    编程 2025-04-28
  • 如何使用WebAuth保护Web应用

    WebAuth是用于Web应用程序的一种身份验证技术,可以提高应用程序的安全性,防止未经授权的用户访问应用程序。本文将介绍如何使用WebAuth来保护您的Web应用程序。 一、什么…

    编程 2025-04-28
  • Python编写Web程序指南

    本文将从多个方面详细阐述使用Python编写Web程序,并提供具有可行性的解决方法。 一、Web框架的选择 Web框架对Web程序的开发效率和可维护性有着重要的影响,Python中…

    编程 2025-04-28
  • Python接口自动化测试

    本文将从如下多个方面对Python编写接口自动化进行详细阐述,包括基本介绍、常用工具、测试框架、常见问题及解决方法 一、基本介绍 接口自动化测试是软件测试中的一种自动化测试方式。通…

    编程 2025-04-27
  • 有哪些Python软件可以用来构建Web应用

    Python语言是一种胶水语言,可以和多种语言以及系统进行交互,广泛应用于多个领域。在Web应用开发领域,Python是一个功能强大的语言,在Python社区中有许多优秀的Web应…

    编程 2025-04-27
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27

发表回复

登录后才能评论