【WSDL】01 JAX-WS 入门案例
去年这个时候工作遇见时暂时总结的笔记:
https://www.cnblogs.com/mindzone/p/14777493.html
当时也不是很清楚,直到最近前同事又遇上了这项技术,
除了WSDL,还多另一个CXF框架,那看来还是需要再学习一下的
B站搜了一下,还找到了,黑马19期Java班还讲了
黑马视频参考地址:
https://www.bilibili.com/video/BV1zf4y1H7UG
JAX-WS 入门案例:
用IDEA创建普通Java工程,不需要Maven和任何依赖
这一套工具库是JDK官方提供的内容
一、编写服务端
1、首先需要提供一个接口,说明服务端需要怎样对外提供数据服务
package cn.cloud9.jax_ws.server.intf; /**
* 天气接口
*/
public interface WeatherInterface {
/**
* 根据城市名称参数,返回该城市的天气
* @param cityName
* @return
*/
String queryWeather(String cityName);
}
2、然后实现这个接口,并且标记为这是一个WebService接口
package cn.cloud9.jax_ws.server.intf; import javax.jws.WebService; /**
* @author OnCloud9
* @description
* @project WebService
* @date 2022年04月23日 11:10
*
* 标注此接口是Web服务接口
*/
@WebService
public class WeatherInterfaceImpl implements WeatherInterface{
@Override
public String queryWeather(String cityName) {
System.out.println("打印城市名称:" + cityName);
return cityName + " 天气:晴朗";
}
}
3、创建启动类,提供地址和服务接口,发布服务
地址是服务所在的主机地址,端口可以任意设置(没有占用的)
package cn.cloud9.jax_ws.server; import cn.cloud9.jax_ws.server.intf.WeatherInterfaceImpl; import javax.xml.ws.Endpoint; /**
* @author OnCloud9
* @description
* @project WebService
* @date 2022年04月23日 11:12
*/
public class ServerMain { public static void main(String[] args) {
/**
* 发布服务
* 服务访问地址:
* http://127.0.0.1:9090/weather?wsdl
* WSDL阅读方式,从下向上
*/
String url = "http://127.0.0.1:9090/weather";
Endpoint.publish(url, new WeatherInterfaceImpl());
}
}
启动之后,可以使用浏览器访问服务发布定义的地址
需要添加GET参数?wsdl
http://127.0.0.1:9090/weather?wsdl

二、编写客户端
服务端案例开发完成,接着是客户端案例的开发
这个发布的服务,其实相当于一个调用说明书:
http://127.0.0.1:9090/weather?wsdl
使用XML记载了资源名称等等
JDK提供了一个 生成工具,wimport.exe工具
可以直接根据服务说明书,生成客户端需要的接口资源

命令:
wimport -s . http://127.0.0.1:9090/weather?wsdl

可以发现是完全按照服务端编写包位置生成的,
这里把Server包重命名成Client包
然后编写客户端启动类
package cn.cloud9.jax_ws.client; import cn.cloud9.jax_ws.client.intf.WeatherInterfaceImpl;
import cn.cloud9.jax_ws.client.intf.WeatherInterfaceImplService; import java.io.UnsupportedEncodingException; /**
* @author OnCloud9
* @description
* @project JAX-WS-Client
* @date 2022年04月23日 11:31
*/
public class WeatherClient { public static void main(String[] args) throws UnsupportedEncodingException {
// 创建服务视图
final WeatherInterfaceImplService implService =
new WeatherInterfaceImplService(); // 获取服务实现类
final WeatherInterfaceImpl instance =
implService.getPort(WeatherInterfaceImpl.class); String city = "南昌"; // 调用查询方法
final String queryWeather = instance.queryWeather(new String(city.getBytes("GBK")));
System.out.println(queryWeather);
}
}
启动之后发现报错了
两个类具有相同的 XML 类型名称 "{http://intf.server.jax_ws.cloud9.cn/}queryWeatherResponse"。
请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
Exception in thread "main" com.sun.xml.internal.ws.spi.db.DatabindingException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
两个类具有相同的 XML 类型名称 "{http://intf.server.jax_ws.cloud9.cn/}queryWeatherResponse"。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
this problem is related to the following location:
at cn.cloud9.jax_ws.client.intf.QueryWeatherResponse
at public javax.xml.bind.JAXBElement cn.cloud9.jax_ws.client.intf.ObjectFactory.createQueryWeatherResponse(cn.cloud9.jax_ws.client.intf.QueryWeatherResponse)
at cn.cloud9.jax_ws.client.intf.ObjectFactory
this problem is related to the following location:
at cn.cloud9.jax_ws.server.intf.QueryWeatherResponse
然后根据报错信息我找到了对应的资源
发现wimport生成的注解是这样的

只提供了一个name值,但是报错还要求一个namespace,
这里只要根据错误提示,名字和命名空间不一样就可以了

修改之后,启动客户端,调用成功

【WSDL】01 JAX-WS 入门案例的更多相关文章
- 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例
mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...
- CXF-JAX-WS开发(一)入门案例
一.Web Service 1.定义 W3C定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作. 2.作用 多系统间数据通信 二.CXF是什么? CXF是目 ...
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...
- SpringMvc核心流程以及入门案例的搭建
1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...
- Struts2第一个入门案例
一.如何获取Struts2,以及Struts2资源包的目录结构的了解 Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...
- Freemarker入门案例
Freemarker入门案例 首先需要到freemarker官方下载freemarker的jar包,导入到项目中,如:freemarker-2.3.19.jar 1.先建个freemarker的工具类 ...
- 回顾Spring MVC_01_概述_入门案例
SpringMVC: SpringMVC是Spring为展现层提供的基于MVC设计的优秀的Web框架,是目前最主流的MVC框架之一 SpringMVC通过注解,让POJO成为处理请求的控制器,而无须实 ...
- JavaScript 入门案例
四. JavaScript 入门案例 在看本节之前,笔者建议您先看 JavaScript 基础篇 https://www.cnblogs.com/IT-LFP/p/10945884.html 1. ...
- CXF-JAX-RS开发(一)入门案例
一.简介 资源驱动.基于HTTP协议[按照标准指定URL,就可以访问数据]以XML|JSON格式传输数据. 二.quickstart 1.创建maven project[Packaging:jar] ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
随机推荐
- Linux字符设备驱动学习
注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...
- Java synchronized与ReentrantLock的区别
synchronized与ReentrantLock的区别 synchronized是一个关键字,ReentrantLock是一个类 synchronized修饰代码块和方法,ReentrantLoc ...
- journalctl 命令使用总结
转载请注明出处: journalctl 命令是 Linux 系统中一个用于查询和管理系统日志的命令行工具,它基于 systemd 的日志守护进程 systemd-journald 的功能. 1. 介绍 ...
- Kubernetes监控手册04-监控Kube-Proxy
简介 首先,请阅读文章<Kubernetes监控手册01-体系介绍>,回顾一下 Kubernetes 架构,Kube-Proxy 是在所有工作负载节点上的. Kube-Proxy 默认暴露 ...
- MySQL BETWEEN AND包含边界值
select count(1) from table_a where my_date between '20230715' and '20230717'; 上面的SQL我们发现只统计了20230715 ...
- 判断一个数n是不是快乐数
引言 题目:编写一个算法来判断一个数n是不是快乐数 来源:网友分享的面试算法题 题目描述 [快乐数定义] 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 ...
- 第二届算法、图像处理与机器视觉国际学术会议(AIPMV2024)
第二届算法.图像处理与机器视觉国际学术会议(AIPMV2024) 2024 2nd International Conference on Algorithm, Image Processing an ...
- word文档生成视频,自动配音、背景音乐、自动字幕,另类创作工具
简介 不同于别的视频创作工具,这个工具创作视频只需要在word文档中打字,插入图片即可.完事后就能获得一个带有配音.字幕.背景音乐.视频特效滤镜的优美作品. 这种不要门槛,没有技术难度的视频创作工具, ...
- 订单号规则,不能重复。redis去重 redis集合set应用
订单号规则,不能重复.redis去重 redis集合set应用 redis锁定商品解决并发售卖问题 RedisUtil工具类https://www.cnblogs.com/oktokeep/p/179 ...
- 用CSS3绘制iPhone手机
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 用CSS3绘制iPhone手机 日期:2017-7-3 阿 ...