1分钟速通Webservice服务端和客户端

news2024/11/17 14:35:40

服务端实现:

我们随便实现一个简单服务,客户请求我们的服务,我们给客户返回响应的信息

@WebService
public class HelloServiceImpl implements HelloService {
    @Override
    public String getString(String name) {
        return "hello," + name;
    }
}

这里用到了一个关键的注解@WebService表示该类是一个服务类,需要发布其中的public的方法

发布服务,Endpoint类发布服务,publish方法,两个参数:1.服务地址;2.服务实现类

package com.zlp.server;

import com.zlp.service.impl.HelloServiceImpl;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;

import javax.xml.ws.Endpoint;

@Component
public class HelloServer implements SmartLifecycle {

    @Override
    public void start() {
        // spring容器启动之后执行当前方法内逻辑
        System.out.println("webservice start");
        Endpoint.publish("http://127.0.0.1:8808/hello", new HelloServiceImpl());
    }

    @Override
    public void stop() {
        System.out.println("webservice end");
    }

    @Override
    public boolean isRunning() {
        return false;
    }
}

测试访问wsdl:

客户端实现:

1、直接通过命令行发送请求命令,webservice本质就http请求

2、Java代码实现:

package com.zlp.client;


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class HelloClient {
    public static void main(String[] args) throws Exception {
        String requestSoapMessage = getRequestSoapMessage("webservice");
        //System.out.println(requestSoapMessage);
        HttpClient client = new HttpClient();
        PostMethod postMethod = new PostMethod("http://127.0.0.1:8808/hello?wsdl");
        postMethod.setRequestBody(requestSoapMessage);
        client.executeMethod(postMethod);
        String xml = postMethod.getResponseBodyAsString();
        System.out.println(xml);

        // 解析xml数据
        InputStream in = new ByteArrayInputStream(xml.getBytes("utf-8"));
        SAXReader sax = new SAXReader();
        Document document = sax.read(in);
        Element root = document.getRootElement();
        Element e = root.element("Body").element("getStringResponse").element("return");
        System.out.println("result:" + e.getData().toString());
    }

    private static String getRequestSoapMessage(String name) {
        String requestSoapMessage = "";
        StringBuffer buf = new StringBuffer();
        buf.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")

                .append("\n").append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:impl=\"http://impl.service.zlp.com/\"> ")
                .append("\n").append("<soapenv:Header />")
                .append("\n").append("<soapenv:Body>")
                .append("\n").append("<impl:getString>")
                .append("\n").append("<arg0>"+name+"</arg0>")
                .append("\n").append("</impl:getString>")
                .append("\n").append("</soapenv:Body>")
                .append("\n").append("</soapenv:Envelope>");

        requestSoapMessage = buf.toString();
        return requestSoapMessage;
    }
}

执行结果:

3、SoapUI客户端工具

输入wsdl地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用numpy处理图片——基础操作

大纲 准备工作图片像素大小修改透明度 numpy是一款非常优秀的处理多维数组的Python基础包。在现实中&#xff0c;我们最经常接触的多维数组相关的场景就是图像处理。本系列将通过若干篇对图像处理相关的探讨&#xff0c;来介绍numpy的使用方法&#xff0c;以获得直观的体验。 本…

主食冻干哪款好?十大放心主食冻干名单推荐

作为养猫的人&#xff0c;我们都知道每天最担心的事情就是如何为心爱的猫咪选择一款高品质的猫粮。我们都希望为猫咪提供最好的营养&#xff0c;让它们健康快乐地成长。然而&#xff0c;近期的一些事件&#xff0c;如百利猫粮生虫和VE主食冻干掰开有虫&#xff0c;让我们不得不…

【开源商城推荐-LGPL-3.0】ts-mall 聚惠星商城

dts-shop: 聚惠星商城 DTS-SHOP&#xff0c;基于 微信小程序 springboot vue 技术构建 &#xff0c;支持单店铺&#xff0c;多店铺入驻的商城平台。项目包含 微信小程序&#xff0c;管理后台。基于java后台语言&#xff0c;已功能闭环&#xff0c;且达到商用标准的一套项目体…

AI文本朗读应用(二)

调用api实现TTS 注&#xff1a;如对api的使用有任何疑问&#xff0c;可以查阅文本转语音 REST API。 选择右侧“解决方案资源管理器”中的“TTS_Demo”&#xff0c;右键选择“添加”->“新建项”。 选择“类”&#xff0c;名称为“Authentication.cs”&#xff0c;点击“添…

【漏洞复现】锐捷EG易网关cli.php后台命令执行漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关&#xff0c;由锐捷网络完全自主研发。它集成了先进的软硬件体系架构&#xff0c;配备了DPI深入分析引擎、行为分析/管理引擎&#xff0c;可以在保证网络出口高效转发的条件下&#xff0c;提供专业的流控功能、出色的URL过滤以及本地化…

14:00面试,14:07就出来了,问的问题有点变态。。。

前言 刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还…

Zustand 状态管理

Zustand 状态管理 安装创建 Store给 Store 添加TS类型约束在页面使用 Store返回 Store 中所有状态在 Store 中使用 async 异步方法使用 Immer Middleware (中间件) 更新深层嵌套的 State使用 get 方法&#xff0c;在 set 方法外访问 State 中的数据使用 selector什么是 selecto…

炫技作品!极好!独家原创!一种新型改进的蜣螂优化算法(CCCDBO)

炫技作品&#xff01;&#xff0c;独家原创&#xff01; 蜣螂优化算法DBO的含金量不用我多介绍了吧&#xff0c;这是和麻雀优化算法SSA同一个课题组出的算法&#xff0c;业内公认的比较好的算法&#xff0c;这个算法认可度很高&#xff01; 一种新型改进蜣螂优化算法&#xf…

【web缓存】nginx和CDN应用

目录 一、代理的工作机制 二、代理服务器的概念 三、代理服务器的作用 四、常用的代理服务器 五、nginx缓存代理部署 步骤一&#xff1a;首先脚本完成三台nginx的部署 步骤二&#xff1a;在两个后端原始服务器上分别创建测试页面 步骤三&#xff1a;完成nginx缓存服务器…

中央处理器CPU(2)---流水CPU与RISC

1.流水CPU &#xff08;一看到这个就想起老家的流水席了&#xff0c;不知道各位吃过没。&#xff09; &#x1f308;1.1并行处理技术 对于计算机来说不论如何发展&#xff0c;最重要的一个追求目标就是很高的运算速度&#xff0c;冯诺依曼机是&#xff0c;现代计算机依然是&…

高效实用的电商数据分析产品之店铺分析如何入手?

在电商行业&#xff0c;如何做好店铺分析&#xff1f;应该从哪几个方面进行&#xff1f; 1、寻找竞品店铺 在众多店铺中找到与自己风格&#xff08;定位/用户群体等&#xff09;相仿的相关竞争对手的标签。研究竞品店铺中爆款产品作为一个店铺运营&#xff08;新品开发等&…

HubSpot CRM:卓越客户服务的关键引擎

在数字化时代&#xff0c;提供卓越的客户服务是企业成功的关键之一。HubSpot CRM以其强大的功能和灵活性&#xff0c;成为实现卓越客户服务的关键引擎&#xff0c;以下是强调HubSpot CRM在客户服务中的应用的关键方面&#xff1a; 1. 全面的客户视图 HubSpot CRM集成了全面的…

解决:接口中返回的文本不能保持原本格式也无法换行

一、问题&#xff1a; 原本传入的文本是有换行的&#xff0c;但是用div展示接口返回的文本&#xff0c;所示内容没有保持原有格式没达到换行效果 以下是传入到接口的文本格式 使用div标签展示接口返回的文本&#xff0c;但并没有保持原有格式&#xff0c;文本也没换行 <di…

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时&#xff0c;准备让 halo、mysql8.1、nginx 三个容器在同一个网段中&#xff0c;并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下&#xff1a; nginx …

城堡世界源码

随着数字技术的飞速发展和人们对于娱乐需求的不断提升&#xff0c;城堡世界源码开发逐渐成为了新的热门话题。城堡世界是一个集潮流、艺术、科技于一体的数字娱乐新领域&#xff0c;通过将虚拟现实、增强现实等技术融入传统玩具设计中&#xff0c;为玩家们带来了全新的互动体验…

如何高效阅读Linux的man page

有时候需要在man page中查某个命令的用法&#xff0c;我们一般会使用man command的方式来查询&#xff0c;例如man vmstat.但是对于一些bash内置的命令&#xff0c;如alias,如果使用man alias会打开General Commands Manual ,如下图 可以看到&#xff0c;内置命令很多&#xff…

计算机毕业设计---ssm实验室设备管理系统

项目介绍 ssm实验室设备管理系统。前台jsplayuieasyui等框架渲染数据、后台java语言搭配ssm(spring、springmvc、mybatis、maven) 数据库mysql8.0。该系统主要分三种角色&#xff1a;管理员、教师、学生。主要功能学校实验设备的借、还、修以及实验课程的发布等等&#xff1b;…

使用kennycason.kumo.WordCloud For JAVA 制作词云图

官网&#xff1a;https://kennycason.com/posts/2014-07-03-kumo-wordcloud.html 一&#xff1a;添加POM文件 <!-- 词云 --><dependency><groupId>com.kennycason</groupId><artifactId>kumo-core</artifactId><version>1.27<…

【Verilog】期末复习——分别画出下面两个程序综合后的电路图/reg型数据和wire型数据的区别

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…

认识Linux指令之 “find grep” 命令

01.find指令&#xff1a; -name Linux下find命令在目录结构中搜索文件&#xff0c;并执行指定的操作。 Linux下find命令提供了相当多的查找条件&#xff0c;功能很强大。由于find具有强大的功能&#xff0c;所以它的选项也很多&#xff0c;其中大部分选项都值得我们花时间来…