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 ...
随机推荐
- java基础学习总结——抽象类
一.抽象类介绍
- 在使用完全拷贝过来的类文件(带xib文件)时,要及时修改 File's Owner
- ImageView 设置图片来自:http://blog.csdn.net/lincyang/article/details/6562163
android doc中是这样描述的: public void setImageResource (int resId) 这是其中的一个方法,参数resld是这样: ImageView.setImag ...
- mysql 报错ERROR 1064 (42000),原因使用了mysql保留字 (right syntax to use near 'groups)
msql 8.0 执行语句: SELECT * FROM groups; 会报如题的错误, 需加反引号进行修改: SELECT * FROM `groups`; //////////分割线//// ...
- C错误异常处理,异常处理
预处理器标识#error的目的是什么啊? 指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编 ...
- @JVM新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...
- OpenCV 脸部跟踪(1)
本文中的知识来自于Mastering opencv with practical computer vision project一书. 本文实施的脸部跟踪算法都是基于数据驱动的,主要 ...
- java中需要用equals来判断两个字符串值是否相等
在C++中,两个字符串比较的代码可以为: (string1==string2) 但在java中,这个代码即使在两个字符串完全相同的情况下也会返回false Java中必须使用string1.equal ...
- C#操作AD及Exchange Server总结(一)
这篇博客的目的:根据亲身项目经历,总结对AD及Exchange Server的操作,包括新建AD用户,设置密码,为AD用户创建邮箱等. 本文完全原创,转载请说明出处,希望对大家有用. 文档目录: 测试 ...
- Javascript开发笔记:不完整的继承
Javascript的继承和标准的oop继承有很大的区别,Javascript的继承是采用原型链的技术,每个类都会将“成员变量”和“成员函数”放到 prototype 上,Js++都过supercla ...