好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

SpringBoot调webservice接口,一般都会给你url如:
http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl
http://10.103.6.158:35555/check_ticket/Ticket_Check.asmx
其中.asmx是.net开发提供的webservice服务。

依赖

引入相关依赖:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<!-- webService-->

  <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web-services</artifactId>

   </dependency>

 

   <!-- CXF webservice -->

   <dependency>

       <groupId>org.apache.cxf</groupId>

       <artifactId>cxf-spring-boot-starter-jaxws</artifactId>

       <version> 3.2 . 1 </version>

   </dependency>

   <dependency>

       <groupId>org.apache.cxf</groupId>

       <artifactId>cxf-rt-transports-http</artifactId>

       <version> 3.2 . 1 </version>

   </dependency>

浏览webService提供的方法,确定入参顺序 直接在浏览器里面访问url,如下

用SoapUI工具

用些是.asmx格式,也可以直接在浏览器访问。会列出方法列表

代码

创建client:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

package com.gqzdev.sctads.configuration;

 

import com.gqzdev.sctads.constant.CommonConstant;

import lombok.extern.slf4j.Slf4j;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import org.apache.cxf.transport.http.HTTPConduit;

import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

/**

  * @author gqzdev

  * @date 2021/08/26 15:53

  **/

@Configuration

@Slf4j

public class JaxWsClientConfig {

 

     @Bean ( "JaxWsClient" )

     public Client client() {

         // 创建动态客户端

         JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();

         //CommonConstant.PUBLIC_SECURITY_URL为连接的url,如http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl

         log.info( "publicsecurity webService url : {}" , CommonConstant.PUBLIC_SECURITY_URL);

         //创建client

         Client client = clientFactory.createClient(CommonConstant.PUBLIC_SECURITY_URL);

         HTTPConduit conduit = (HTTPConduit) client.getConduit();

         HTTPClientPolicy policy = new HTTPClientPolicy();

         policy.setAllowChunking( false );

         // 连接服务器超时时间 10秒

         policy.setConnectionTimeout( 10000 );

         // 等待服务器响应超时时间 20秒

         policy.setReceiveTimeout( 20000 );

         conduit.setClient(policy);

         return client;

     }

}

有了client,便可以直接注入调用invoke。找到自己需要调用的方法:
下面只展示一个方法的调用演示,其他的类似

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

package com.gqzdev.sctads.service.impl;

 

import com.gqzdev.sctads.constant.CommonConstant;

import com.gqzdev.sctads.service.PublicSecurityService;

import lombok.extern.slf4j.Slf4j;

import org.apache.cxf.endpoint.Client;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.scheduling.annotation.Async;

import org.springframework.stereotype.Component;

 

import javax.xml.namespace.QName;

 

/**

  * @author gqzdev

  * @date 2021/08/26 15:24

  **/

@Slf4j

@Component

public class PublicSecurityServiceImpl implements PublicSecurityService {

 

 

     @Autowired

     @Qualifier ( "JaxWsClient" )

     private Client client;

 

     /**

      * 旅客登记

      */

     @Override

//    @Async

     public String chineseAddNew(Object... params) {

//        QName qname = new QName("service.", CommonConstant.CHINESE_ADD);

         try {

             Object[] invoke = client.invoke(CommonConstant.CHINESE_ADD, params);

             if (invoke != null && invoke.length >= 1 ) {

                 String result = (String) invoke[ 0 ];

                 log.info( "userAddNew result: {}" , result);

                 return result;

             }

 

         } catch (Exception e) {

//            e.printStackTrace();

             log.error( "invoke WS userAddNew method error: {}" , e.getMessage());

         }

         return null ;

     }   

}

使用post请求访问webservice接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

package com.gqzdev.sctads.service.impl;

 

import cn.hutool.core.util.XmlUtil;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.http.HttpEntity;

import org.springframework.http.HttpHeaders;

import org.springframework.http.MediaType;

import org.springframework.stereotype.Component;

import org.springframework.util.LinkedMultiValueMap;

import org.springframework.util.MultiValueMap;

import org.springframework.web.client.RestTemplate;

 

import java.util.Map;

 

/**

  * 对接票务系统验证

  *

  * @author gqzdev

  * @date 2021/08/25 17:07

  **/

@Component

@Slf4j

public class TicketCheckServiceImpl implements TicketCheckService {

 

     @Autowired

     @Qualifier ( "nativeRestTemplate" )

     private RestTemplate restTemplate;

 

     @Override

     public boolean ticketCheck(TicketRequestVO ticketRequestVO) {

 

         //构造请求参数xml

         Map objMap = JSONObject.toJavaObject(JSONObject.parseObject(JSON.toJSONString(ticketRequestVO)), Map. class );

         String objXml = XmlUtil.mapToXmlStr(objMap);

         String requestXml = objXml.replace( "<xml>" , "<MQ_MESSAGE>" ).replace( "</xml>" , "</MQ_MESSAGE>" );

         log.info( "ticket request params xml: {}" , requestXml);

 

         /**

          * 调用webservice请求

          */

         HttpHeaders headers = new HttpHeaders();

         //header参数

         headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

         //请求参数

         MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();

         //接口参数

         map.add( "msg" , requestXml);

         //构造实体对象

         HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);

         //发送post请求webservice

         String response = restTemplate.postForObject(CommonConstant.TICKET_REQUEST_URL, param, String. class );

         log.info( "ticket request response: {}" , response);

 

         /**

          * 解析返回xml,返回是否认证成功

          */

         String responseXml = XmlUtil.unescape(response);

         Map<String, Object> resultMap = XmlUtil.xmlToMap(responseXml);

         TicketResponseVO ticketResponseVO = JsonUtil.map2pojo(resultMap, TicketResponseVO. class );

         //0开闸 ,1不开闸

         if (ticketResponseVO.getMQ_MESSAGE().getMSG_BODY().getCOMMAND() == 0 ) {

             return true ;

         }

         return false ;

     }

 

 

}

XML相关操作

关于xml解析处理,这边推荐使用hutool里面的XmlUtil

到此这篇关于SpringBoot调用第三方WebService接口(.wsdl与.asmx类型 )的文章就介绍到这了,更多相关SpringBoot WebService接口内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/ganquanzhong/article/details/119938295

查看更多关于SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)的详细内容...

  阅读:35次