webservice系统学习笔记6-使用soap的header传递消息

本文演示了如何使用SOAP的Header来传递额外的消息信息,包括创建服务、处理Header信息及解析返回消息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载自: https://www.cnblogs.com/yangzhilong/p/3302693.html 作者:yangzhilong 转载请注明该声明。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值