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

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. [SWPUCTF 2021 新生赛]easy_md5

    打开靶场可以看到一串代码,进行代码审计我们可以知道这个网页包含了一个叫flag2.php的文件,如果想要得到这个文件就得进行GET传参和POST传参. 并且这里用到一个MD5绕过,传参的值不能相等,但 ...

  2. “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...

  3. 基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架

    #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <err ...

  4. vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM file cannot be loaded by `require`.]报错

    在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题: ...

  5. MySQL bit类型增加索引后查询结果不正确案例浅析

    昨天同事遇到的一个案例,这里简单描述一下:一个表里面有一个bit类型的字段,同事在优化相关SQL的过程中,给这个表的bit类型的字段新增了一个索引,然后测试验证 时,居然发现SQL语句执行结果跟不加索 ...

  6. java 8 stream toMap问题

    最近使用java的stream功能有点多,理由有2: 1)少写了不少代码 2)在性能可以接受的范围内 在巨大的collection基础上使用stream,没有什么经验.而非关键业务上,乐于使用stre ...

  7. mysql多表删除指定记录

    在Mysql4.0之后,mysql开始支持跨表delete. Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和 ...

  8. Linux设备模型:2、基本对象 Kobject、Kset、Ktype

    原文:http://www.wowotech.net/device_model/kobject.html 作者:wowo 发布于:2014-3-7 0:25 分类:统一设备模型 前言 Kobject是 ...

  9. QT学习:06 常用的全局变量与宏定义

    --- title: framework-cpp-qt-06-常用的全局变量与宏定义 EntryName: framework-cpp-qt-06-global date: 2020-04-10 11 ...

  10. @ConfigurationProperties 还能这样用

    在编写项目代码时,我们要求更灵活的配置,更好的模块化整合.在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 applicat ...