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

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. 如何创建一个线程池,为什么不推荐使用Executors去创建呢?

    我们在学线程的时候了解了几种创建线程的方式,比如继承Thread类,实现Runnable接口.Callable接口等,那对于线程池的使用,也需要去创建它,在这里我们提供2种构造线程池的方法: 方法一: ...

  2. Atlas快速入门

    先说一些废话 之前的公司在数据中台的项目上调研决定启用了Atlas作为我们数据血缘管理的工具,让我给大家写了一份Atlas快速入门的文档,所以在这里我将这篇文档以一个纯新手视角的方式再一次优化,希望能 ...

  3. 类的阐述 package(包)

    类的阐述 同一个文件中可以定义很多类 编译后,每个类都会生成独立的.class文件 一个类中,只能有一个主函数,每个类都可以有自己的主函数 public修饰的类称为公开类,要求类名必须与文件名称完全相 ...

  4. react 高阶函数

    HOC(Higher Order Components)就是一个函数,传给它一个组件,它返回一个新的组件. 高阶组件:就相当于手机壳,通过包装组件,增强组件功能. 实现步骤: 首先创建一个函数 指定函 ...

  5. IceRPC之依赖注入>快乐的RPC

    作者引言 很高兴啊,我们来到了IceRPC之依赖注入>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界. 依赖注入和IceRPC 了解 IceRPC (C#) 如何为依赖注入 ...

  6. AlexNet论文解读

    前言   作为深度学习的开山之作AlexNet,确实给后来的研究者们很大的启发,使用神经网络来做具体的任务,如分类任务.回归(预测)任务等,尽管AlexNet在今天看来已经有很多神经网络超越了它,但是 ...

  7. work03

    第一题: 1.定义一个包含十个元素的数组.数组元素自己给出 2.遍历打印出数组元素 3.求出数组当中的最小值打印出来 4.求出数组当中的最大值打印出来 5,求数组当中 第二大 值 第二题: 1.定义一 ...

  8. 前端使用 Konva 实现可视化设计器(15)- 自定义连接点、连接优化

    前面,本示例实现了折线连接线,简述了实现的思路和原理,也已知了一些缺陷.本章将处理一些缺陷的同时,实现支持连接点的自定义,一个节点可以定义多个连接点,最终可以满足类似图元接线的效果. 请大家动动小手, ...

  9. ElasticSearch不区分字母大小写搜索

    0.停止使用该索引的服务(避免新加了数据没备份) 1.备份filesearch索引(检查备份的索引和原索引数据条数是否一致) 1 POST http://127.0.0.1:9200/_reindex ...

  10. OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查

    问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 C ...