去年这个时候工作遇见时暂时总结的笔记:

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 入门案例的更多相关文章

  1. 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例

    mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...

  2. CXF-JAX-WS开发(一)入门案例

    一.Web Service 1.定义 W3C定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作. 2.作用 多系统间数据通信 二.CXF是什么? CXF是目 ...

  3. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  4. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  5. Struts2第一个入门案例

      一.如何获取Struts2,以及Struts2资源包的目录结构的了解    Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...

  6. Freemarker入门案例

    Freemarker入门案例 首先需要到freemarker官方下载freemarker的jar包,导入到项目中,如:freemarker-2.3.19.jar 1.先建个freemarker的工具类 ...

  7. 回顾Spring MVC_01_概述_入门案例

    SpringMVC: SpringMVC是Spring为展现层提供的基于MVC设计的优秀的Web框架,是目前最主流的MVC框架之一 SpringMVC通过注解,让POJO成为处理请求的控制器,而无须实 ...

  8. JavaScript 入门案例

    四.  JavaScript 入门案例 在看本节之前,笔者建议您先看 JavaScript 基础篇  https://www.cnblogs.com/IT-LFP/p/10945884.html 1. ...

  9. CXF-JAX-RS开发(一)入门案例

    一.简介 资源驱动.基于HTTP协议[按照标准指定URL,就可以访问数据]以XML|JSON格式传输数据. 二.quickstart 1.创建maven project[Packaging:jar] ...

  10. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

随机推荐

  1. kettle从入门到精通 第四十一课 kettle 事务(单个转换文件)

    1.大家都知道,我们在平常写java或者C#等代码时,如果涉及操作多个表时为了保持数据一致性需要开启事务,同样kettle也支持事务,今天我们一起来学习下kettle 单个转换文件内的事务特性. 转换 ...

  2. (十)selenium实现微博高级搜索信息爬取

    1.selenium模拟登陆 2.定位进入高级搜索页面 3.对高级搜索进行定位,设置. 4.代码实现 import time from selenium import webdriver from l ...

  3. Javascript高级程序设计第四章 | ch4 | 阅读笔记

    变量.作用域与内存 原始值与引用值 什么是字面量形式? let obj = { key1: val1, key2: val2, foo () { } } 这就是字面量形式,手动声明一个对象的属性和方法 ...

  4. 关于Lecture2建立一个Git远程仓库的补充

    Smiling & Weeping ---- 心之何如,有似万丈迷津, 遥亘千里. 其中并无舟子可渡人, 除了自渡,他人爱莫能助. Git 远程仓库(Github) Git 并不像 SVN 那 ...

  5. 三种方法教你下载 Windows 10 和 Windows 11 原生镜像

    原文地址:https://itxiaozhang.com/three-methods-to-download-windows-10-and-windows-11-iso/ 本文配合视频食用效果最佳,视 ...

  6. Jemter代理服务器录制脚本,优化后形成性能测试场景

    在进行性能测试(压力.负载)等,先要有对应的测试场景,比如添加功能:要先登录成功,然后调用添加接口,输入添加的内容,才可以添加成功.那么可以通过Jemter代理服务器,设置代理,打开测试的网站,录制脚 ...

  7. ansible v2.9.9离线安装脚本

    链接:https://pan.baidu.com/s/18uxyWWyJ39i1mJJ1hb8zww?pwd=QWSC 提取码:QWSC

  8. injectionIII iOS代码注入工具(下)

    injectionIII iOS代码注入工具(下) 本文将解决如何使用injectionIII对主页热重载,如果对injectionIII不了解的同学请回到上篇查看 Vaccine 简单地说Vacci ...

  9. BST-Treap名次树数组&指针实现板子 Ver1.0

    这里只有板子没有原理QWQ 可实现 1.插入 x 数 2.删除 x 数(若有多个相同的数,只删除一个) 3.查询 x 数的排名(排名定义为比当前数小的数的个数 +1) 4.查询排名为 x 的数 5.求 ...

  10. WPF网格类型像素着色器

    由于WPF只能写像素着色器,没法写顶点着色器,所以只能在这上面做文章了 刚好有个纹理坐标TEXCOORD输入可用,而且值的范围是已知的0-1,左上角是原点,这就好办了 例子 索引 二分网格 使用cei ...