创建服务器端
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消息中,消息头(Header)和消息体(Body)是两个主要部分。本文将深入探讨如何实现隐式和显式SOAP消息头,并通过源码和工具进行实践。 ### 一、SOAP消息结构 1. **SOAP Envelope**: SOAP消息的核心元素,...
SOAP(Simple Object Access ...在实际的文章中,作者可能深入讨论了更复杂的话题,如SOAP消息的安全性、错误处理、WS-*扩展(如WS-Security、WS-Addressing等),或者是如何在特定的开发环境中集成和使用SOAP服务。
SOAP Header位于SOAP Envelope内,提供了扩展功能,允许在消息传递过程中添加特性,比如身份验证、路由信息等。SOAP Header的处理通常是可选的,可以通过`mustUnderstand`和`actor`属性来指定哪些部分必须被处理,...
`encodingStyle`属性是SOAP消息中用于指定数据编码方式的一个关键属性。它可以应用于任何SOAP元素,并影响到该元素及其所有子元素的数据类型。由于SOAP消息没有默认的编码方式,因此在需要时必须明确指定。例如: `...
标题“使用CXF实现带header的soap服务”指的是在Java环境中,通过Apache CXF框架创建一个SOAP(简单对象访问协议)服务,同时处理带有HTTP头部信息的请求。Apache CXF是一个开源的服务框架,它允许开发者构建和消费...
综上所述,通过Apache CXF提供的Interceptor机制,我们可以方便地在SOAP消息中添加、读取和验证自定义头部信息,从而增强Web服务的安全性和功能。在实际项目中,务必根据具体需求和安全策略来设计和实现SOAP头的处理...
SOAP消息的Header和Body元素可以根据需要扩展,以支持各种自定义功能和数据传递。 总的来说,SOAP是一种强大的工具,它利用XML的灵活性和HTTP的广泛支持,使得分布式计算变得更加便捷。然而,SOAP的复杂性和相对较...
此外,SOAP还支持使用消息头部来传递诸如事务ID和安全信息等环境数据,这意味着服务本身无需关心这些细节,从而提高了系统的解耦合度。 ##### 示例:事务处理 下面是一个包含事务处理信息的SOAP头部示例: ```xml...
SOAP消息通常包含三部分:头部(Header)、主体(Body)和封装(Envelope),这些元素都以XML格式表示。 在上面提供的SOAP示例中,我们可以看到以下几个关键知识点: 1. **SOAP Envelope**: 这是SOAP消息的基础...
SOAP的消息结构主要由四个部分组成:信封(Envelope)、头部(Header)、体部(Body)和错误处理(Fault)。其中,信封元素是SOAP消息的容器,用于封装整个SOAP消息;头部元素包含消息的元数据,如身份验证和事务...
SOAP(Simple Object Access Protocol),即简单对象访问协议,是一种基于XML(Extensible Markup Language)的协议,用于在Web服务中传递结构化的和格式化的信息。SOAP允许应用程序通过HTTP(Hypertext Transfer ...
描述中的“关于soap的文档”表明内容可能包括SOAP的基本概念、工作原理、如何使用SOAP进行Web服务调用,以及SOAP消息的结构和格式等相关知识。 基于标签"soa soap_java java_soap soap",我们可以推测文件可能涵盖...
- SOAP消息结构主要包括三个部分:Envelope(信封)、Header(头部)和Body(主体)。 2. **Java SOAP客户端**: - 在Java中,JAX-WS(Java API for XML Web Services)是用于创建SOAP客户端的主要API。 - 使用`...
1. **SOAP消息结构**:SOAP消息由三个主要部分组成:Envelope(信封),Header(头部)和Body(主体)。Envelope定义了消息的结构,Header包含可选的处理信息,而Body则包含实际的业务逻辑数据。 2. **SOAP协议与...
### SOAP介绍 SOAP,全称为Simple Object ...无论是简单的查询还是复杂的业务流程处理,SOAP都能提供可靠、一致的消息传递机制。随着Web服务的发展,SOAP将继续发挥其关键作用,为开发者提供灵活高效的解决方案。
- SOAP消息由一个XML文档组成,包含一个信封(Envelope)、可选的头(Header)部分以及必需的体(Body)部分。 - 信封是所有SOAP消息的最外层元素,它的命名空间为`http://schemas.xmlsoap.org/soap/envelope/`。 ...
SOAP Header则用于在SOAP消息中传递附加信息。 【SOAP知识点】 1. SOAP是一个基于XML的协议,用于在分布式环境中交换结构化和类型化的信息。 2. SOAP消息由三个主要部分组成:Envelope(信封),Header(头部)和...
SOAP消息通常包含头部(Header)和主体(Body)两部分,头部可以包含额外的元数据,而主体则包含实际的应用数据。 SOAP与CORBA和COM/DCOM的区别在于: - **CORBA**:是一种全面的面向对象中间件,提供了一套完整的...
SOAP消息通常由一个XML文档构成,包含三个主要部分:Envelope(信封)、Header(头部)和Body(主体)。 2. **Envelope**:这是SOAP消息的基础,用于封装整个消息。它定义了消息的结构,并告诉接收方这是一个SOAP...