webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)...

服务器端:

1、编写wsdl文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/mywsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyServiceImplService" targetNamespace="http://www.example.org/mywsdl/"><!-- 定义类型 --><wsdl:types><xsd:schema targetNamespace="http://www.example.org/mywsdl/"><xsd:element name="add" type="tns:add"/><xsd:element name="addResponse" type="tns:addResponse"/><xsd:element name="divide" type="tns:divide"/><xsd:element name="divideResponse" type="tns:divideResponse"/><xsd:element name="licenseInfo" type="xsd:string"/><xsd:complexType name="add"><xsd:sequence><xsd:element name="a" type="xsd:int"/><xsd:element name="b" type="xsd:int"/></xsd:sequence></xsd:complexType><xsd:complexType name="addResponse"><xsd:sequence><xsd:element name="addResult" type="xsd:int"/></xsd:sequence></xsd:complexType><xsd:complexType name="divide"><xsd:sequence><xsd:element name="num1" type="xsd:int"/><xsd:element name="num2" type="xsd:int"/></xsd:sequence></xsd:complexType><xsd:complexType name="divideResponse"><xsd:sequence><xsd:element name="divideResult" type="xsd:int"/></xsd:sequence></xsd:complexType></xsd:schema></wsdl:types><!-- 定义消息 --><wsdl:message name="add"><wsdl:part name="add" element="tns:add"/></wsdl:message><wsdl:message name="addResponse"><wsdl:part name="addResponse" element="tns:addResponse"></wsdl:part></wsdl:message><wsdl:message name="divide"><wsdl:part name="divide" element="tns:divide"/></wsdl:message><wsdl:message name="divideResponse"><wsdl:part name="divideResponse" element="tns:divideResponse"/></wsdl:message><!-- 头消息 --><wsdl:message name="licenseInfo"><wsdl:part name="licenseInfo" element="tns:licenseInfo"></wsdl:part></wsdl:message><!-- 定义port --><wsdl:portType name="IMyService"><wsdl:operation name="add"><wsdl:input message="tns:add"/><wsdl:output message="tns:addResponse"/></wsdl:operation><wsdl:operation name="divide"><wsdl:input message="tns:divide"/><wsdl:output message="tns:divideResponse"/></wsdl:operation></wsdl:portType><!-- 绑定服务 --><wsdl:binding name="myServiceSOAP" type="tns:IMyService"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="add"><wsdl:input><soap:body use="literal"/><!-- 为add添加隐式的头信息 --><soap:header use="literal" part="licenseInfo" message="tns:licenseInfo"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation><wsdl:operation name="divide"><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><!-- 发布服务 --><wsdl:service name="MyServiceImplService"><!-- 这里的名字必须和<wsdl:definitions里的name一致 --><wsdl:port binding="tns:myServiceSOAP" name="MyServiceImplPort"><soap:address location="http://localhost:8989/ms"/></wsdl:port></wsdl:service>
</wsdl:definitions>

 

2、使用wsimport命令生成服务端接口类(IMyService.java)
备注:生成的其他文件都可以删除

在add方法的参数定义上加上

@WebParam(name="licenseInfo")String licenseInfo

 

3、编写服务接口的实现类MyServiceImpl.java

package org.example.mywsdl;import javax.jws.WebService;//这里必须制定wsdlLocation来约定参数等名称等
//endpointInterface可写也可不写,写它主要是用到自动生成的一些注解信息
@WebService(endpointInterface="org.example.mywsdl.IMyService",targetNamespace="http://www.example.org/mywsdl/",wsdlLocation="META-INF/wsdl/mywsdl.wsdl",name="MyServiceImpl")
public class MyServiceImpl implements IMyService {@Overridepublic int add(int a, int b, String licenseInfo) {return a+b;}@Overridepublic int divide(int num1, int num2) {return num1/num2;}}

 

4、服务启动类

package org.example.mywsdl;import javax.xml.ws.Endpoint;public class RunService {public static void main(String[] args) {//这里的发布地址必须和wsdl中定义的一样Endpoint.publish("http://localhost:8989/ms", new MyServiceImpl());}
}

 

访问服务:http://localhost:8989/ms?wsdl

 

客户端直接用上面的地址生成即可,生成的wsdl文件即是我们编写的那个wsdl文件

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/mywsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyServiceImplService" targetNamespace="http://www.example.org/mywsdl/"><!-- 定义类型 --><wsdl:types><xsd:schema targetNamespace="http://www.example.org/mywsdl/"><xsd:element name="add" type="tns:add"></xsd:element><xsd:element name="addResponse" type="tns:addResponse"></xsd:element><xsd:element name="divide" type="tns:divide"></xsd:element><xsd:element name="divideResponse" type="tns:divideResponse"></xsd:element><xsd:element name="licenseInfo" type="xsd:string"></xsd:element><xsd:complexType name="add"><xsd:sequence><xsd:element name="a" type="xsd:int"></xsd:element><xsd:element name="b" type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="addResponse"><xsd:sequence><xsd:element name="addResult" type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="divide"><xsd:sequence><xsd:element name="num1" type="xsd:int"></xsd:element><xsd:element name="num2" type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType><xsd:complexType name="divideResponse"><xsd:sequence><xsd:element name="divideResult" type="xsd:int"></xsd:element></xsd:sequence></xsd:complexType></xsd:schema></wsdl:types><!-- 定义消息 --><wsdl:message name="add"><wsdl:part name="add" element="tns:add"></wsdl:part></wsdl:message><wsdl:message name="addResponse"><wsdl:part name="addResponse" element="tns:addResponse"></wsdl:part></wsdl:message><wsdl:message name="divide"><wsdl:part name="divide" element="tns:divide"></wsdl:part></wsdl:message><wsdl:message name="divideResponse"><wsdl:part name="divideResponse" element="tns:divideResponse"></wsdl:part></wsdl:message><!-- 头消息 --><wsdl:message name="licenseInfo"><wsdl:part name="licenseInfo" element="tns:licenseInfo"></wsdl:part></wsdl:message><!-- 定义port --><wsdl:portType name="IMyService"><wsdl:operation name="add"><wsdl:input message="tns:add"></wsdl:input><wsdl:output message="tns:addResponse"></wsdl:output></wsdl:operation><wsdl:operation name="divide"><wsdl:input message="tns:divide"></wsdl:input><wsdl:output message="tns:divideResponse"></wsdl:output></wsdl:operation></wsdl:portType><!-- 绑定服务 --><wsdl:binding name="myServiceSOAP" type="tns:IMyService"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding><wsdl:operation name="add"><wsdl:input><soap:body use="literal"></soap:body><!-- 为add添加隐式的头信息 --><soap:header use="literal" part="licenseInfo" message="tns:licenseInfo"></soap:header></wsdl:input><wsdl:output><soap:body use="literal"></soap:body></wsdl:output></wsdl:operation><wsdl:operation name="divide"><wsdl:input><soap:body use="literal"></soap:body></wsdl:input><wsdl:output><soap:body use="literal"></soap:body></wsdl:output></wsdl:operation></wsdl:binding><!-- 发布服务 --><wsdl:service name="MyServiceImplService"><!-- 这里的名字必须和<wsdl:definitions里的name一致 --><wsdl:port binding="tns:myServiceSOAP" name="MyServiceImplPort"><soap:address location="http://localhost:8989/ms"></soap:address></wsdl:port></wsdl:service>
</wsdl:definitions>

 

使用该wsdl生成客户端java代码后的add方法如下:

@WebMethod@WebResult(name = "addResult", targetNamespace = "")@RequestWrapper(localName = "add", targetNamespace = "http://www.example.org/mywsdl/", className = "com.ws04.Add")@ResponseWrapper(localName = "addResponse", targetNamespace = "http://www.example.org/mywsdl/", className = "com.ws04.AddResponse")public int add(@WebParam(name = "a", targetNamespace = "") int a,@WebParam(name = "b", targetNamespace = "") int b);

此时方法的参数里没有看到有头信息参数的定义,调用该方法可以使用handler或者soap来编码传递头信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gzip 多个文件_Java Zip多文件压缩和 GZIP压缩

/*** 多文件压缩** author Administrator**/public class ZipCompress {public static void main(String args[]) {String[] filepaths { "D:\\zip1.txt", "D:\\zip2.txt" };try {FileOutputStream f new FileOutputStream("D://test.zip");//…

Ubuntu文件压缩、解压缩、打包解包(带软链接)、拷贝文件(带软链接)、拷贝文件夹

参考&#xff1a;Ubuntu 命令解压文件大全 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-04 17:18:55 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107791294 参考&#xff1a;打包和压缩的概念和区别 作者&#xff1a;不浪漫的罪名L…

java 内存和实际内存_请问更改eclipse内存和更改jvm内存是一会事儿吗?

RSS列 表示&#xff0c; 程序占用了多少物理内存。 虚拟内存可以不用考虑&#xff0c;它并不占用实际物理内存。 (2). top 命令也可以 其中VIRT(或VSS)列 表示&#xff0c;程序占用了多少虚拟内存。 同 ps aux 中的 VSZ列 RES列 表示&#xff0c; 程序占用了多少物理内存。同 p…

thinkphp 编辑器kindeditor

首先&#xff0c;去官网下载最新版的kindeditor&#xff0c;然后把里面asp&#xff0c;jsp&#xff0c;net&#xff0c;example的全删除&#xff0c;然后改名为editor放进public&#xff08;最外层目录的public&#xff09;文件夹里面 在目录lib目录建立ORG文件夹&#xff08;个…

equation

equation 题目描述 有一棵n 个点的以 1 为根的树, 以及 n 个整数变量xi。树上 i 的父亲是 fi&#xff0c; 每条边(i,fi)有一个权值wi&#xff0c;表示一个方程 xi xfi wi&#xff0c;这 n-1个方程构成了一个方程组。 现在给出q 个操作&#xff0c;有两种类型: 1 u v s&#x…

Ubuntu开启FTP服务方法(Ubuntu和Windows之间互传文件需要开启——服务器端)

目录Ubuntu开启FTP服务步骤&#xff1a;Ubuntu开启FTP服务步骤&#xff1a; 工作中Ubuntu和Windows之间互传文件&#xff0c;需要服务器端&#xff08;Ubuntu&#xff09;开启FTP服务&#xff0c;客户端&#xff08;Windows&#xff09;安装FileZilla。平时自己学习电脑安装虚拟…

舞伴配对问题java_舞伴配对问题

循环队列的应用——舞伴配对问题&#xff1a;在舞会上&#xff0c;男、女各自排成一队。舞会开始时&#xff0c;依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等&#xff0c;则较长的那一队中未配对者等待下一轮舞曲。假设初始男、女人数及性别已经固定&#xf…

逆元

复习逆元…… 逆元 求法&#xff1a; 1&#xff0c;快速幂     根据费马小定理有\(a^{p - 1} \equiv 1 \quad (mod \quad p)\),把左边拆开一下得到     \[a \cdot a^{p - 2} \equiv 1 \quad (mod \quad p)\]     因此\(a^{p - 2}\)为\(a\)在\(mod \quad p\)意义下的…

java如何让线程等待_如何使Java线程等待另一个线程的输出?

我真的建议你经历一个教程&#xff0c;如Sun’s Java Concurrency&#xff0c;你开始在多线程的魔法世界。还有一些好书出来了(google for“Concurrent Programming in Java”&#xff0c;“Java Concurrency in Practice”)。要得到你的答案&#xff1a;在你必须等待dbThread的…

win7共享wifi

为什么80%的码农都做不了架构师&#xff1f;>>> 1.从开始菜单找到“命令提示符”&#xff0c;或直接键入cmd快速搜索&#xff0c;右键单击它&#xff0c;选择“以管理员身份运行” 2.运行以下命令启用虚拟无线网卡&#xff1a; netsh wlan set hostednetwork mod…

Ubuntu开启NFS、SSH服务(驱动开发用到、电脑端登录ARM板用到)

参考&#xff1a;Ubuntu下NFS服务的开启 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-04 14:06:58 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107784877 目录NFS服务的开启1.安装NFS服务2.创建 linux 工作目录3.配置NFSUbuntu下SSH…

【整理】MySQL 之 autocommit

2019独角兽企业重金招聘Python工程师标准>>> mysql 默认是开启 auto commit 的。可以通过如下命令查看 session 级别和 global 级别的设置&#xff1a; mysql> select session.autocommit; ---------------------- | session.autocommit | ---------------------…

java某个类避免findbug检查_Findbugs能否在java中检测到捕获RuntimeException?

你能不能让我知道Findbugs可以在java中检测到catcing RuntimeException吗&#xff1f;有效的java建议我们不要捕获RuntimeException.所以我想知道Findbugs可以抓错了.另外,我已经检查过Klocwork JD.CATCH和checkstyle IllegalCatch是否适用于此目的.最佳答案 有点.在findbugs中…

交叉编译链的安装

参考&#xff1a;嵌入式 交叉编译链的安装 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-04 18:13:13 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107789879 目录什么是交叉编译器交叉编译器的下载交叉编译器的安装1.把下载的文件放到…

Scrapy将爬取的段落整合为字符串

使用Scrapy框架爬取文章的时候&#xff0c;经常会遇到要爬取多个段落的问题&#xff0c;如果这个时候使用的是&#xff1a; text response.xpath("......").extract() 那么会发现爬取下来的文章是以段落为单位的list&#xff0c;不方便直接展示。 这个时候可以将lis…

Ubuntu下安装VS Code以及C/C++插件(PS工作目录的创建)

参考&#xff1a;Visual Studio Code Ubuntu下安装 以及C/C插件大全 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-05 11:55:53 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107811506 目录为何选择安装VS CodeVisual Studio Code 安装…

Common Lisp中调用R

2019独角兽企业重金招聘Python工程师标准>>> R是功能强大的统计软件&#xff0c;和Lisp一样也有一个交互式的命令行环境&#xff0c;还有众多的扩展库&#xff0c;可以用来进行专业的统计分析。要在Common Lisp中方便的调用R的功能&#xff0c;可以试用rcl这个库。安…

java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)

java使用iText 生成PDF全攻略,包括创建文档,设置字体,添加表格(PdfPTable),创建新页(newPage),设置布局,加密主要使用的jar包: itextpdf-5.4.2.jar,itext-pdfa-5.4.2.jar,itext-xtra-5.4.2.jar,如果用到中文&#xff0c;需要CJK字体的扩展包&#xff1a;itext-asian.jar如果用到…

恩智浦NXP I.MX6ULL芯片介绍下载官网资料

参考&#xff1a;NXP I.MX6ULL芯片介绍以及资料的获取 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-09-26 10:54:26 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108808573 目录I.MX6ULL芯片介绍以及官网资料的获取I.MX6ULL芯片介绍以及…

变速不变调方法

语音变速不变调&#xff0c;即语音时长规整&#xff0c;是指不改变原说话人的音调及语义信息&#xff0c;只改变说话人的语速。 语音变速不变调算法有三大类&#xff1a;时域法、频域法、参量法&#xff0c;如表2-1所示。 表2-1 变速不变调算法分类 时域法 频域法 参量法 剪…