`

soap中header头部消息传递

 
阅读更多

创建服务器端

1.创建一个接口

IMyService.java

package com.test.service;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(targetNamespace = "http://www.webservice.com")
public interface IMyService {
	// 传递header信息
	@WebResult(name = "user")
	public List<User> list(@WebParam(header = true, name = "authInformation") String authInformation);
}

 

2.创建实现接口的类

MyServiceImpl.java

package com.test.service;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

@WebService(endpointInterface = "com.test.service.IMyService", targetNamespace = "http://www.webservice.com")
public class MyServiceImpl implements IMyService {

	private static List<User> users = new ArrayList<User>();

	public MyServiceImpl() {
		users.add(new User(1, "admin", "管理员", "111111"));
	}

	@Override
	public List<User> list(String authInformation) {
		// 打印客户端传递过来的头部信息
		System.out.println(authInformation);
		return users;
	}
}

 

3.开启服务

MyServer.java

package com.test.service;

import javax.xml.ws.Endpoint;

public class MyServer {
	public static void main(String[] args) {
		String address = "http://localhost:9999/server";
		// 发布服务的实现类
		Endpoint.publish(address, new MyServiceImpl());
	}
}

 

4.测试类TestSoap.java

// header头部消息传递
@Test
public void test04() {
	try {
		// 创建服务
		URL url = new URL("http://localhost:9999/server");
		QName qname = new QName("http://www.webservice.com", "MyServiceImplService");
		Service service = Service.create(url, qname);

		// 创建Dispatch
		Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName("http://www.webservice.com", "MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);

		// 创建SOAP的body消息
		SOAPMessage message = MessageFactory.newInstance().createMessage();
		SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
		SOAPBody body = envelope.getBody();

		// 创建SOAP的header消息
		SOAPHeader header = envelope.getHeader();
		if (header == null) {
			header = envelope.addHeader();
		}
		QName hname = new QName("http://www.webservice.com", "authInformation", "ns");
		header.addHeaderElement(hname).setValue("12345");

		// 根据QName创建相应的节点
		QName ename = new QName("http://www.webservice.com", "list", "ns");
		body.addBodyElement(ename);
		message.writeTo(System.out);
		System.out.println("\n invoking...");

		// 通过dispatch传递消息,返回响应消息
		SOAPMessage response = dispatch.invoke(message);
		response.writeTo(System.out);
		System.out.println();

		// 将响应的消息转换为dom对象
		Document doc = response.getSOAPBody().extractContentAsDocument();
		NodeList userList = doc.getElementsByTagName("user");
		Unmarshaller unmarshaller = JAXBContext.newInstance(User.class).createUnmarshaller();
		for (int i = 0; i < userList.getLength(); i++) {
			User user = (User) unmarshaller.unmarshal(userList.item(i));
			System.out.println(user.getNickname());
		}
	} catch (SOAPException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (JAXBException e) {
		e.printStackTrace();
	}
}

 

运行结果:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header><ns:authInformation xmlns:ns="http://www.webservice.com">12345</ns:authInformation></SOAP-ENV:Header><SOAP-ENV:Body><ns:list xmlns:ns="http://www.webservice.com"/></SOAP-ENV:Body></SOAP-ENV:Envelope>

 invoking...

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:listResponse xmlns:ns2="http://www.webservice.com"><user><id>1</id><nickname>管理员</nickname><password>111111</password><username>admin</username></user></ns2:listResponse></S:Body></S:Envelope>

管理员

 

在服务器端也会把设置的头部信息打印出:12345

 

分享到:
评论

相关推荐

    实现隐式和显式 SOAP 消息头

    在SOAP消息中,消息头(Header)和消息体(Body)是两个主要部分。本文将深入探讨如何实现隐式和显式SOAP消息头,并通过源码和工具进行实践。 ### 一、SOAP消息结构 1. **SOAP Envelope**: SOAP消息的核心元素,...

    SOAP消息格式

    SOAP(Simple Object Access ...在实际的文章中,作者可能深入讨论了更复杂的话题,如SOAP消息的安全性、错误处理、WS-*扩展(如WS-Security、WS-Addressing等),或者是如何在特定的开发环境中集成和使用SOAP服务。

    SOAP结构简析与编写方式

    SOAP Header位于SOAP Envelope内,提供了扩展功能,允许在消息传递过程中添加特性,比如身份验证、路由信息等。SOAP Header的处理通常是可选的,可以通过`mustUnderstand`和`actor`属性来指定哪些部分必须被处理,...

    Soap+消息.doc

    `encodingStyle`属性是SOAP消息中用于指定数据编码方式的一个关键属性。它可以应用于任何SOAP元素,并影响到该元素及其所有子元素的数据类型。由于SOAP消息没有默认的编码方式,因此在需要时必须明确指定。例如: `...

    使用CXF实现带header的soap服务

    标题“使用CXF实现带header的soap服务”指的是在Java环境中,通过Apache CXF框架创建一个SOAP(简单对象访问协议)服务,同时处理带有HTTP头部信息的请求。Apache CXF是一个开源的服务框架,它允许开发者构建和消费...

    CXF 添加soap 头部信息.zip_CXF增加soap头验证_bluex8z_cxf_meltedkw7_soap信息头

    综上所述,通过Apache CXF提供的Interceptor机制,我们可以方便地在SOAP消息中添加、读取和验证自定义头部信息,从而增强Web服务的安全性和功能。在实际项目中,务必根据具体需求和安全策略来设计和实现SOAP头的处理...

    soap消息

    SOAP消息的Header和Body元素可以根据需要扩展,以支持各种自定义功能和数据传递。 总的来说,SOAP是一种强大的工具,它利用XML的灵活性和HTTP的广泛支持,使得分布式计算变得更加便捷。然而,SOAP的复杂性和相对较...

    SOAP协议样列

    此外,SOAP还支持使用消息头部来传递诸如事务ID和安全信息等环境数据,这意味着服务本身无需关心这些细节,从而提高了系统的解耦合度。 ##### 示例:事务处理 下面是一个包含事务处理信息的SOAP头部示例: ```xml...

    SOAP示例,轻松学SOAP

    SOAP消息通常包含三部分:头部(Header)、主体(Body)和封装(Envelope),这些元素都以XML格式表示。 在上面提供的SOAP示例中,我们可以看到以下几个关键知识点: 1. **SOAP Envelope**: 这是SOAP消息的基础...

    java SOAP教程

    SOAP的消息结构主要由四个部分组成:信封(Envelope)、头部(Header)、体部(Body)和错误处理(Fault)。其中,信封元素是SOAP消息的容器,用于封装整个SOAP消息;头部元素包含消息的元数据,如身份验证和事务...

    SOAP协议规范——SOAP详解

    SOAP(Simple Object Access Protocol),即简单对象访问协议,是一种基于XML(Extensible Markup Language)的协议,用于在Web服务中传递结构化的和格式化的信息。SOAP允许应用程序通过HTTP(Hypertext Transfer ...

    soap.rar_SOA_SOAP java_java soap_soap

    描述中的“关于soap的文档”表明内容可能包括SOAP的基本概念、工作原理、如何使用SOAP进行Web服务调用,以及SOAP消息的结构和格式等相关知识。 基于标签"soa soap_java java_soap soap",我们可以推测文件可能涵盖...

    java_soap学习资料

    - SOAP消息结构主要包括三个部分:Envelope(信封)、Header(头部)和Body(主体)。 2. **Java SOAP客户端**: - 在Java中,JAX-WS(Java API for XML Web Services)是用于创建SOAP客户端的主要API。 - 使用`...

    soap编程全解,web服务开发原理

    1. **SOAP消息结构**:SOAP消息由三个主要部分组成:Envelope(信封),Header(头部)和Body(主体)。Envelope定义了消息的结构,Header包含可选的处理信息,而Body则包含实际的业务逻辑数据。 2. **SOAP协议与...

    soap 教程

    ### SOAP介绍 SOAP,全称为Simple Object ...无论是简单的查询还是复杂的业务流程处理,SOAP都能提供可靠、一致的消息传递机制。随着Web服务的发展,SOAP将继续发挥其关键作用,为开发者提供灵活高效的解决方案。

    soap规范web service调用

    - SOAP消息由一个XML文档组成,包含一个信封(Envelope)、可选的头(Header)部分以及必需的体(Body)部分。 - 信封是所有SOAP消息的最外层元素,它的命名空间为`http://schemas.xmlsoap.org/soap/envelope/`。 ...

    soap资料及面试资料,机struts资料,级soapheader资料.zip

    SOAP Header则用于在SOAP消息中传递附加信息。 【SOAP知识点】 1. SOAP是一个基于XML的协议,用于在分布式环境中交换结构化和类型化的信息。 2. SOAP消息由三个主要部分组成:Envelope(信封),Header(头部)和...

    Java中的SOAP技术--(2)

    SOAP消息通常包含头部(Header)和主体(Body)两部分,头部可以包含额外的元数据,而主体则包含实际的应用数据。 SOAP与CORBA和COM/DCOM的区别在于: - **CORBA**:是一种全面的面向对象中间件,提供了一套完整的...

    SOAP,所有库包

    SOAP消息通常由一个XML文档构成,包含三个主要部分:Envelope(信封)、Header(头部)和Body(主体)。 2. **Envelope**:这是SOAP消息的基础,用于封装整个消息。它定义了消息的结构,并告诉接收方这是一个SOAP...

Global site tag (gtag.js) - Google Analytics