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

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. itest(爱测试) 4.5.2 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...

  2. 使用Express写接口

    接口规范 随着前后端分离越来越普遍, 后端接口规范也就越来越重要了,一套良好的接口规范可以提升工作效率, 减少沟通障碍.通常我们都会采用RestfulApi方式来提供接口, 使用 JSON 来传输数据 ...

  3. ajax兼容处理

     // ajax的兼容处理         // 1.创建ajax对象         // 标准浏览器         // const xhr = new XMLHttpRequest();    ...

  4. 美团面试:说说Netty的零拷贝技术?

    零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升 IO(Input & Output)的传输性能. 那么问题来了,为什么零拷贝技术能提升 IO 性能? 1.零拷贝 ...

  5. C#.NET 使用Windows证书库中的证书

    public static X509Certificate2 GetCertificate(string commonName, StoreName storeName) { X509Certific ...

  6. 燕千云AITSM重塑IT服务管理

    ​ IT服务经历了三个阶段,缘起于设备管理,兴起于灾难恢复,发展于IT服务管理.IT服务发展到目前的阶段,企业所使用的系统功能也由孤立的系统转变为综合的集成系统,IT服务所管理的对象也由核心业务转变为 ...

  7. gradle dependencies 查找jar导入OR解决jar冲突

    在gradle项目中,使用gradle dependencies先查询jar包的导入关系.然后找到导入的jar加入到项目中来.解决jar冲突等问题. 类似格式如下: annotationProcess ...

  8. java datetime数据类型去掉时分秒

    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类.LocalDate是一个不可变的日期对象,它只包含年.月.日三个字段. 1. ...

  9. 天翼云centos7.6安装redis6.2.6

    以下部分的具体略: 1.wget获取源码 2.make 这里重点说下,如何使用 utils/install_server.sh脚本 使用install_service.sh添加服务 有了这个脚本,那么 ...

  10. Nginx+Fail2ban 实现同一ip在一分钟内连续三次请求同一接口并响应成功时进行封禁

    1. 安装 Fail2Ban 和 Nginx 如果尚未安装 Fail2Ban 和 Nginx,可以使用以下命令进行安装: # CentOS默认的仓库中可能不包含Nginx,所以需要添加EPEL(Ext ...