Java调用与发布Webservice接口(一)

打印 上一主题 下一主题

主题 780|帖子 780|积分 2340


一  准备工作

(一)开发环境

demo以springboot为基础框架,使用到了httpclient、hutool等依赖,详情如下:
        springboot版本:
        org.springframework.boot        spring-boot-starter-parent        2.7.8        cxf与httpclient 、hutool依赖:
  1.     <dependency>
  2.         <groupId>org.apache.httpcomponents</groupId>
  3.         <artifactId>httpclient</artifactId>
  4.     </dependency>
复制代码
  1.     <dependency>
  2.         <groupId>cn.hutool</groupId>
  3.         <artifactId>hutool-all</artifactId>
  4.         <version>5.8.20</version>
  5.     </dependency>
复制代码
二 发布接口

首先创建一个测试接口,@WebService声明这是一个webservice接口,name为接口名称,targetNamespace 很紧张,表明webservice接口的命名空间。@WebMethod()声明这是一个接口下的函数方法,@WebParam声明函数需要的参数。
@WebService(name = "UnifySearchService", targetNamespace = "http://com.test.webservice/service")
public interface UnifySearchService {
  1. @WebMethod()
  2. String testService(@WebParam(name = "parameter") String parameter);
复制代码
}
创建该接口的实现类就可以在函数种编写业务处置惩罚代码:
  1. @Override
  2. public String testService(String parameter) {
  3.     // code
  4.    
  5.     return "parameter:" + parameter;
  6. }
复制代码
创建发布webservice接口的配置文件:
@Configuration
public class CxfWebServiceConfig {
  1. @Resource
  2. private UnifySearchService unifySearchService;
  3. @Bean(name = Bus.DEFAULT_BUS_ID)
  4. public SpringBus springBus() {
  5.     return new SpringBus();
  6. }
  7. /**
  8. * 访问地址 http://127.0.0.1:8085/ws/service?wsdl
  9. */
  10. @Bean
  11. public Endpoint endpoint() {
  12.     EndpointImpl endpoint = new EndpointImpl(springBus(), unifySearchService);
  13.     endpoint.publish("/service");
  14.     return endpoint;
  15. }
复制代码
}
在applicaiton.properties中,添加以下配置:

创建完毕后运行项目,访问http://127.0.0.1:8085/ws/service?wsdl,可见以下内容:
到此,webservice接口就发布乐成了。
三  接口调用

(一)httpclient调用

webservice接口调用在此展示两种最简单的方式,先说最简单的调用方法,httpclient方法调用,需要使用soapUI工具生成xml请求体:
再创建httpclient请求,将上面的xml请求体作为请求参数soapXml,发送POST请求:
  1. public static String doPostSoap(String postUrl, String soapAction, String soapXml) throws IOException {
  2.     String retStr = "";
  3.     CloseableHttpClient httpClient = CustomerHttpClient4.getHttpClient();
  4.     HttpPost httpPost = new HttpPost(postUrl);
  5.     httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
  6.     httpPost.setHeader("SOAPAction", soapAction);
  7.     StringEntity data = new StringEntity(soapXml, Charset.forName("UTF-8"));
  8.     httpPost.setEntity(data);
  9.     try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
  10.         HttpEntity httpEntity = response.getEntity();
  11.         String entity = EntityUtils.toString(httpEntity, "UTF-8");
  12.         if (response.getStatusLine().getStatusCode() == 200) {
  13.             retStr = entity;
  14.         }
  15.     }
  16.     return retStr;
  17. }
  18. public static void main(String[] args) {
  19.     String result;
  20.     String xmlParam = "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://com.wp.webservice/service"><soapenv:Header/><soapenv:Body><ser:testService><parameter>HTTP client请求</parameter></ser:testService>/soapenv:Body></soapenv:Envelope>";
  21.     try {
  22.         result = doPostSoap("http://localhost:8085/ws/service?wsdl", "", xmlParam);
  23.     } catch (IOException e) {
  24.         throw new RuntimeException(e);
  25.     }
  26.     System.out.println(result);
  27. }
复制代码
调用效果:

(二)hutool工具调用

基于hutool提供的SoapClient工具创建webservice请求调用:
  1. public static String request(String url, String method, String targetNamespace, Map<String, Object> param) {
  2.     SoapClient client = SoapClient.create(url).setMethod(method, targetNamespace).setParams(param, false);
  3.     // 打印组装xml请求体
  4.     Console.log(client.getMsgStr(true));
  5.     String result = client.send();
  6.     return result;
  7. }
  8. public static void main(String[] args) {
  9.     Map<String, Object> param = new HashMap<>();
  10.     param.put("parameter", "hutool请求webservice接口");
  11.     String result = request("http://localhost:8085/ws/service?wsdl",
  12.             "ser:testService",
  13.             "http://com.wp.webservice/service",
  14.             param
  15.     );
  16.     System.out.println(result);
  17. }
复制代码
调用效果:

调用webservice接口除以上两种简便的方式外,还可使用cxf提供的工具类进行调用,具体的调用方法后续有时间再贴出来。
别的我在工作中碰到的是带有head认证的webservice接口,刚开始使用cxf框架,在拦截器中进行头部参数认证,但实际效果并不好,因此查找了以上两种方法,第一种可以适配所有环境,第二种需要进一步完善代码才可以,在后续的文章中会贴出代码,包罗怎样使用hutool调用带有head认证的webservice接口与cxf动态调用webservice接口,敬请期待。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表