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来编码传递头信息
webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)...相关推荐
- webservice系统学习笔记8-简单的权限校验
服务端handler.java package com.ws01;import java.util.Set;import javax.xml.namespace.QName; import javax ...
- 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复
立即学习:https://edu.csdn.net/course/play/24458/296236?utm_source=blogtoedu 1.修复端口被占用的bug import socketp ...
- Hyperledger Fabric学习笔记(三)- 启动网络并测试一个Fabcar的demo
参考文章:https://blog.csdn.net/jambeau/article/details/107551208 前言:文章底下的$GOPATH即为~/go,也就是当前用户下的go目录,比如我 ...
- AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)
1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...
- django系统学习笔记
转自:http://hi.baidu.com/derris/item/7ca6013e330563fede2221ab 2010-02-07 00:12 django系统学习笔记--(1)hello ...
- React系统学习笔记
***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 服务分组
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 服务分组 当一个接口有多种实现时,可以用group区分. <dubbo:se ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 只订阅
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 只订阅 问题 为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如 ...
最新文章
- mysql innodb表分区
- linux resin 自动启动不了,Resin 安装-配置-自启动-Linux
- Android4.1 onTouchEvent分析 (选字模式等)
- python datetime用法_python datetime用法学习笔记
- .NET Core TDD 前传: 编写易于测试的代码 -- 构建对象
- Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来
- 中缀表达式值(信息学奥赛一本通-T1358)
- HDOJ2013_蟠桃记
- 斯诺登:澳大利亚的监视政策比NSA还下流
- vue 直传视频到阿里云OSS
- 阿里CEO张勇:打破各企业边界 联手对抗黑灰产
- 设置自动清理mysql binlog日志_自动清理MySQL binlog日志
- ❤️1024福利❤️ 100张高清壁纸打包分享
- 【PAC集成电机控制芯片】了解PAC集成电机控制芯片
- 初来乍到,多多关照(其实不是初来了^_^,Hello CSDN,我来了)
- 阿里P8大牛亲自教你!树莓派docker
- APP 游戏审核改动
- 【Codecs系列】x265编码器(十一):快速运动估计搜索方法
- arcgis密度分析
- Foundations of Machine Learning 2nd——第三章(二)growth fuction和 VC-Dimension
热门文章
- 对flex深入研究一点
- springcloud注册中心eureka
- 一个不错的MYSQL数据库备份类,PHP版,一个文件,精简版
- Win10安装MySQL5.7.22 解压缩版(手动配置)方法
- lua_string_pattern
- [转]c++类的构造函数详解
- 微信分享无响应的解决
- history.back(-1)和history.go(-1)的区别
- Java 数组实现堆栈操作
- xml与java对象转换 -- XStreamAlias