服务器端:

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来编码传递头信息

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

  1. webservice系统学习笔记8-简单的权限校验

    服务端handler.java package com.ws01;import java.util.Set;import javax.xml.namespace.QName; import javax ...

  2. 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复

    立即学习:https://edu.csdn.net/course/play/24458/296236?utm_source=blogtoedu 1.修复端口被占用的bug import socketp ...

  3. Hyperledger Fabric学习笔记(三)- 启动网络并测试一个Fabcar的demo

    参考文章:https://blog.csdn.net/jambeau/article/details/107551208 前言:文章底下的$GOPATH即为~/go,也就是当前用户下的go目录,比如我 ...

  4. AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)

    1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...

  5. django系统学习笔记

    转自:http://hi.baidu.com/derris/item/7ca6013e330563fede2221ab 2010-02-07 00:12 django系统学习笔记--(1)hello ...

  6. React系统学习笔记

    ***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...

  7. Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...

  8. Dubbo -- 系统学习 笔记 -- 示例 -- 服务分组

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 服务分组 当一个接口有多种实现时,可以用group区分. <dubbo:se ...

  9. Dubbo -- 系统学习 笔记 -- 示例 -- 只订阅

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 只订阅 问题 为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如 ...

最新文章

  1. mysql innodb表分区
  2. linux resin 自动启动不了,Resin 安装-配置-自启动-Linux
  3. Android4.1 onTouchEvent分析 (选字模式等)
  4. python datetime用法_python datetime用法学习笔记
  5. .NET Core TDD 前传: 编写易于测试的代码 -- 构建对象
  6. Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来
  7. 中缀表达式值(信息学奥赛一本通-T1358)
  8. HDOJ2013_蟠桃记
  9. 斯诺登:澳大利亚的监视政策比NSA还下流
  10. vue 直传视频到阿里云OSS
  11. 阿里CEO张勇:打破各企业边界 联手对抗黑灰产
  12. 设置自动清理mysql binlog日志_自动清理MySQL binlog日志
  13. ❤️1024福利❤️ 100张高清壁纸打包分享
  14. 【PAC集成电机控制芯片】了解PAC集成电机控制芯片
  15. 初来乍到,多多关照(其实不是初来了^_^,Hello CSDN,我来了)
  16. 阿里P8大牛亲自教你!树莓派docker
  17. APP 游戏审核改动
  18. 【Codecs系列】x265编码器(十一):快速运动估计搜索方法
  19. arcgis密度分析
  20. Foundations of Machine Learning 2nd——第三章(二)growth fuction和 VC-Dimension

热门文章

  1. 对flex深入研究一点
  2. springcloud注册中心eureka
  3. 一个不错的MYSQL数据库备份类,PHP版,一个文件,精简版
  4. Win10安装MySQL5.7.22 解压缩版(手动配置)方法
  5. lua_string_pattern
  6. [转]c++类的构造函数详解
  7. 微信分享无响应的解决
  8. history.back(-1)和history.go(-1)的区别
  9. Java 数组实现堆栈操作
  10. xml与java对象转换 -- XStreamAlias