webservice系统学习笔记6-使用soap的header传递消息
1、显示的使用soap的header传递消息(不推荐使用,会破坏正常的代码结构,推荐使用handler处理)
@WebResult(name="deleteResult")
public boolean deleteUser(@WebParam(header=true,name="adminName")String adminName,@WebParam(name="deleteName")String delName);
@Override
public boolean deleteUser(String adminName, String delName) {
return true;
}
wsdl:

xsd文件

调用代码:
/**
* 使用了SOAP的hearder来传递消息(缺点:会改变方法的参数定义)
*/
@Test
public void test4(){
try {
String namespace = "http://ws01.yzl.com/";
String wsdlUrl = "http://localhost:8888/ws01?wsdl"; //1、创建服务(Service)
URL url = new URL(wsdlUrl);
QName qname = new QName(namespace,"MyServiceImplService");
Service service = Service.create(url, qname); //2、创建Dispatch
//public interface Dispatch<T>extends BindingProviderDispatch 接口提供对动态调用服务端点操作的支持。javax.xml.ws.Service 接口作为创建 Dispatch 实例的工厂。
Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(namespace,"MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE); //3.1、创建SOAPMessage
SOAPMessage message = MessageFactory.newInstance().createMessage();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody(); //3.2、处理header信息
SOAPHeader header = envelope.getHeader();
if(header==null) header = envelope.addHeader();
QName hname = new QName(namespace,"adminName","nn");
header.addHeaderElement(hname).setValue("administrator"); //4、创建QName来指定消息中传递数据
QName ename = new QName(namespace,"deleteUser","nn");
body.addBodyElement(ename);
message.writeTo(System.out);
System.out.println(); //5、通过Dispatch传递消息,并返回响应消息
SOAPMessage returnMessage = dispatch.invoke(message);
returnMessage.writeTo(System.out);//打印返回消息
System.out.println(); //5、解析返回的SOAP消息的XML
Document doc = returnMessage.getSOAPBody().extractContentAsDocument();
//Document doc = returnMessage.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
String result = doc.getElementsByTagName("deleteResult").item(0).getTextContent();
System.out.println("result is :" + result); } catch (Exception e) {
e.printStackTrace();
}
}
结果:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header><nn:adminName xmlns:nn="http://ws01.yzl.com/">administrator</nn:adminName></SOAP-ENV:Header>
<SOAP-ENV:Body><nn:deleteUser xmlns:nn="http://ws01.yzl.com/"/></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:deleteUserResponse xmlns:ns2="http://ws01.yzl.com/"><deleteResult>true</deleteResult></ns2:deleteUserResponse>
</S:Body>
</S:Envelope>
result is :true
webservice系统学习笔记6-使用soap的header传递消息的更多相关文章
- webservice系统学习笔记5-手动构建/发送/解析SOAP消息
手动拼接SOAP消息调用webservice SOAP消息的组成: 1.创建需要发送的SOAP消息的XML(add方法为例子) /** * 创建访问add方法的SOAP消息的xml */ @Test ...
- webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)
服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...
- webservice系统学习笔记7-异常处理
接口类:IMyService.java @WebResult(name="testExceptionResult") public void testException() thr ...
- webservice系统学习笔记4-使用工具查看SOAP消息
使用myeclipse的WTP java ee视图里的[web services Explorer]来测试查看webservice传输的SOAP消息 1. 2. 测试getUserByUsername ...
- webservice系统学习笔记10-使用jax-ws创建基于tomcat类型的容器的ws服务
1.在web-info目录下新建目录wsdl 2.在1步的目录下 新建文件user.wsdl <?xml version="1.0" encoding="UTF-8 ...
- webservice系统学习笔记7-使用handler实现过滤器/拦截器效果
handler可以作用于客户端,也可以作用了服务端 handler分为:1.LogicalHandler:只能获取到soap消息的body. 2.SOAPHandler:可以获取SOAPMessage ...
- webservice系统学习笔记8-简单的权限校验
服务端handler.java package com.ws01; import java.util.Set; import javax.xml.namespace.QName; import jav ...
- webservice系统学习笔记2-使用jdk的命令生成本地代码
使用jdk自带的命令wsimport生成远程服务的本地代码 C:\Documents and Settings\Administrator>wsimport -d E:\mhWorkspace\ ...
- webservice系统学习笔记1-使用注解创建ws服务
简单入门之helloword,具体详细的在后面的章节详细介绍. 使用JDK自带的jax-ws创建并发布一个简单的webservice 在本地创建服务,然后本机访问 1.创建服务提供接口 IMyServ ...
随机推荐
- 国产Linux滋生腐败
回想过去,2002年12月11日至12日,信息产业部与科技部联合主办"Linux软件与应用猜測研讨会".影响中国IT业的重要人士,包含政府决策者.学界权威.主要Linux推动厂商等 ...
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- [MAC OS] NSButton tag 获取
@IBAction func switchContentLayout(_ sender: Any) { let button : NSButton = sender as! NSButton;}
- DDR SDRAM芯片DQS的作用以及读写DQS/DQ对齐方式不同的原因
节选内容转载自https://www.design-reuse.com/articles/13805/the-love-hate-relationship-with-ddr-sdram-control ...
- Python编程学习,高效求解素数程序实例
素数是编程中经常需要用到的. 作为学习Python的示例,下面是一个高效求解一个范围内的素数的程序,不需要使用除法或者求模运算. #coding:utf-8 #设置python文件的编码为utf-8, ...
- iOS开发-xCode代码托管到GitHub
xCode默认的是由源代码管理工作Git,Android Studio内置的也有,之前写过两篇关于Window托管Android代码到GitHub的文章,一直想写篇关于Mac上托管代码的到文章,今天终 ...
- Length of Last Word leetocde java
题目: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return t ...
- API手册 常用功能
directive [ng] a form input input [checkbox] input [email] input [number] input [radio] input [text] ...
- mybatis 针对SQL Server 的 主键id生成策略
SQL Server中命令: select newId() ,可以得到SQL server数据库原生的UUID值,因此我们可以将这条指令写到 Mybatis的主键生成策略配置selectKey中. ...
- GIT 恢复已删除的提交
在Git中一切的操作都是可以恢复的,包括已经删除的提交,今天在做一个项目时就遇到了这种问题,也不知道是怎么回事不小心就把上午提交的所有代码都删除了,于是赶紧通过git log来查看日志,但奇怪的是当时 ...