用Axis操作 Header头部信息
Axis中操作Header的信息是通过Handler来完成的,在读取Header的信息的时候,可以完成Header的操作的Handler有JWSHandler、SOAPMonitorHandler、JAXRPCHandler。JWSHandler是完成jws发布模式的WebService的Header的读取操作,
SOAPMonitorHandler是完成SOAPMonitor模式的,JAXRPCHandler是java rpc模式的。
下面将会用JAXRPCHandler读取客户端的Header信息,然后用BasicHandler将客户端请求的Header写入客户端的响应的Header中。
1、 首先编写一个方法,这个方法什么也不做。就是在这个方法请求和响应的时候分别完成读取Header的信息和写入响应的Header内容。代码如下:
代码
2、 客户端的Header中的内容是下面这样的xml内容
代码
下面将用客户端代码将上面的xml元素添加的Header中,代码如下:
代码
上面的就完成了xml中的内容,并且添加到请求的Header中。
3、 根据上面的Header的内容,我们现在编写一个Handler用来读取客户端请求信息中的Header的内容,这个Handler需要继承JAXRPCHandler。代码如下:
代码
上面读取Header内容的代码有点小长,不过比较简单。就是用循环遍历Header的内容,Header的内容是一个xml的文档。所以用循环一步步向里面遍历,不过感觉写个递归会更简单。
4、 下面将编写一个Handler来向客户端的Response中写入Header内容,写入的Header的内容就是客户端请求的Header内容。代码如下:
代码
上面的代码是取出respHeader = (SOAPHeader) respSe.getHeader();
然后循环遍历Header的元素写入到respHeader.addChildElement(she);
5、 好了,上面已经写好了WebService的方法,以及请求时读取Header内容的Handler和在响应时写入Header内容的Handler。下面开始写wsdd发布当前WebService。
代码
还是用doc命令发布当前WebService,命令如下:
发布完成后,你会看的
Processing file deployHeader.wsdd
<Admin>Done processing</Admin>
的字样就表示发布成功了,然后在浏览器地址栏输入:
http://localhost:8080/AxisWebService/servlet/AxisServlet
你就可以看到OperaterHandler这个WebService了
6、 OperaterHandler这个WebService成功发布,现在就是要编写客户端代码调用这个WebService,客户端代码比较简单,完整代码如下:
代码
call.getResponseMessage();可以得到服务器响应的Header的信息
运行后你可以看到客户端控制台会输出:
responseMessage前面的内容是客户端将会写入到Header中的xml内容,而responseMessage后面的内容就是响应的Header的内容,这段内容是WriteHeaderHandler写入到ResponseMessage中的。
再看看服务器端控制台的内容:
父节点:Header, 节点:ServiceName, 值:ReadHeaderService
父节点:Header, 节点:CreateDate, 值:2010-12-19T06:22:59.931Z
父节点:Header, 节点:Version, 值:1.0
父父节点:Header, 父节点:author, 节点:name##name, 值:axis##axis
父父节点:Header, 父节点:author, 节点:age##age, 值:14##14
父父节点:Header, 父节点:copyRight, 节点:year##year, 值:2010##2010
父父节点:Header, 父节点:copyRight, 节点:number##number, 值:123123123##123123123
父节点:Header, 节点:Tel, 值:555666442
ns1:Header
上面的文本内容是ReadHeaderHandler读取客户端的Header的内容和我们定制的xml的内容是一致的。而后面的xml能入是WriteHeaderHandler中输出的内容。
SOAPMonitorHandler是完成SOAPMonitor模式的,JAXRPCHandler是java rpc模式的。
下面将会用JAXRPCHandler读取客户端的Header信息,然后用BasicHandler将客户端请求的Header写入客户端的响应的Header中。
1、 首先编写一个方法,这个方法什么也不做。就是在这个方法请求和响应的时候分别完成读取Header的信息和写入响应的Header内容。代码如下:
代码
package com.hoo.service;/** * <b>function:</b>读取客户端头部Header信息的WebService * @author hoojo * @createDate Dec 19, 2010 11:33:25 AM * @file ReadHeaderService.java * @package com.hoo.service * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class OperaterHeaderService { /** * <b>function:</b>提供一个空方法,在调用这个方法的时候 * 触发ReadHeaderHandler读取Header的信息 * @author hoojo * @createDate Dec 19, 2010 11:33:54 AM */ public void readHeader() { }}
2、 客户端的Header中的内容是下面这样的xml内容
代码
<ns1:Header soapenv:mustUnderstand="0" xmlns:ns1="soap"><ServiceName>ReadHeaderService</ServiceName><CreateDate>2010-12-19T06:22:59.931Z</CreateDate><ns2:Version xmlns:ns2="service">1.0</ns2:Version><author> <name>axis</name> <age>14</age></author><copyRight> <year>2010</year> <number>123123123</number></copyRight><Tel>555666442</Tel></ns1:Header>
下面将用客户端代码将上面的xml元素添加的Header中,代码如下:
代码
/** 添加请求的header */ //父节点,根节点 SOAPHeaderElement el = new SOAPHeaderElement(new QName("soap", "Header")); //文本节点 MessageElement msgEl = new MessageElement(new QName("ServiceName"), "ReadHeaderService"); el.addChild(msgEl); //文本节点 el.addChild(new MessageElement(new QName("CreateDate"), new Date())); el.addChild(new MessageElement(new QName("service", "Version"), "1.0")); //子元素 msgEl = new MessageElement(new QName("author")); msgEl.addChild(new MessageElement(new QName("name"), "axis")); msgEl.addChild(new MessageElement(new QName("age"), "14")); el.addChild(msgEl); //子元素 msgEl = new MessageElement(new QName("copyRight")); msgEl.addChild(new MessageElement(new QName("year"), "2010")); msgEl.addChild(new MessageElement(new QName("number"), "123123123")); el.addChild(msgEl); el.addChild(new MessageElement(new QName("Tel"), "555666442")); System.out.println(el.toString()); //设置请求的header call.addHeader(el);
上面的就完成了xml中的内容,并且添加到请求的Header中。
3、 根据上面的Header的内容,我们现在编写一个Handler用来读取客户端请求信息中的Header的内容,这个Handler需要继承JAXRPCHandler。代码如下:
代码
package com.hoo.service.handler;import java.util.Iterator;import java.util.List;import javax.xml.soap.SOAPHeader;import org.apache.axis.AxisFault;import org.apache.axis.MessageContext;import org.apache.axis.handlers.JAXRPCHandler;import org.apache.axis.message.MessageElement;import org.apache.axis.message.NodeImpl;import org.apache.axis.message.SOAPHeaderElement;import org.apache.axis.message.Text;/** * <b>function:</b>读取Header信息的Handler * @author hoojo * @createDate Dec 19, 2010 11:34:56 AM * @file ReadHeaderHandler.java * @package com.hoo.service.handler * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class ReadHeaderHandler extends JAXRPCHandler { private static final long serialVersionUID = -546314372478633248L; @SuppressWarnings("unchecked") @Override public void invoke(MessageContext msgContext) throws AxisFault { try { //头对象 SOAPHeader header = msgContext.getCurrentMessage().getSOAPHeader(); Iterator<SOAPHeaderElement> iter = header.getChildElements(); while (iter.hasNext()) { //子元素 SOAPHeaderElement el = iter.next(); //继续子元素 List<NodeImpl> list = el.getChildren(); for (NodeImpl node : list) { if (node.hasChildNodes()) { MessageElement msg = (MessageElement) node; if (msg.hasChildNodes()) { List<NodeImpl> msgNode = msg.getChildren(); for (NodeImpl n : msgNode) { if (!n.hasChildNodes()) { Text text = (Text) n; System.out.println("父节点:" + el.getName() + ", 节点:" + msg.getName() + ", 值:" + text.getValue()); } else { MessageElement child = (MessageElement) n; if (child.hasChildNodes()) { List<NodeImpl> childNode = child.getChildren(); for (NodeImpl n2 : childNode) { if (!n2.hasChildNodes()) { Text text = (Text) n2; System.out.print("父父节点:" + el.getName() + ", 父节点:" + msg.getName()); System.out.println(", 节点:" + child.getName() + "##" + child.getNodeName() + ", 值:" + text.getValue() + "##" + child.getValue()); } } } } } } } } } } catch (Exception e) { e.printStackTrace(); } }}
上面读取Header内容的代码有点小长,不过比较简单。就是用循环遍历Header的内容,Header的内容是一个xml的文档。所以用循环一步步向里面遍历,不过感觉写个递归会更简单。
4、 下面将编写一个Handler来向客户端的Response中写入Header内容,写入的Header的内容就是客户端请求的Header内容。代码如下:
代码
package com.hoo.service.handler;import java.util.Iterator;import javax.xml.soap.SOAPException;import org.apache.axis.AxisFault;import org.apache.axis.Message;import org.apache.axis.MessageContext;import org.apache.axis.handlers.BasicHandler;import org.apache.axis.message.SOAPEnvelope;import org.apache.axis.message.SOAPHeader;import org.apache.axis.message.SOAPHeaderElement;/** * <b>function:</b>用handler向客户端写入Response 的Header信息 * @author hoojo * @createDate Dec 19, 2010 2:08:35 PM * @file WriteHeaderHandler.java * @package com.hoo.service.handler * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class WriteHeaderHandler extends BasicHandler { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") public void invoke(MessageContext msgContext) throws AxisFault { Message msg = msgContext.getCurrentMessage(); SOAPEnvelope se = msg.getSOAPEnvelope(); //request Header的部分头信息 Message reqMsg = msgContext.getRequestMessage(); SOAPEnvelope reqSe = reqMsg.getSOAPEnvelope(); SOAPHeader reqHeader = null; try { reqHeader = (SOAPHeader) reqSe.getHeader(); } catch (SOAPException e) { e.printStackTrace(); } //response Header部分头信息 Message respMsg = msgContext.getResponseMessage(); SOAPEnvelope respSe = respMsg.getSOAPEnvelope(); SOAPHeader respHeader = null; try { respHeader = (SOAPHeader) respSe.getHeader(); } catch (SOAPException e) { e.printStackTrace(); } Iterator<SOAPHeaderElement> iter = reqHeader.examineAllHeaderElements(); while (iter.hasNext()) { SOAPHeaderElement she = iter.next(); try { //添加请求信息到响应的Header中 respHeader.addChildElement(she); } catch (SOAPException e) { e.printStackTrace(); } System.out.println(she.getNodeName()); } //设置响应信息 msgContext.setResponseMessage(respMsg); try { System.out.println("header Info:" + se.getHeader()); } catch (SOAPException e) { e.printStackTrace(); } }}
上面的代码是取出respHeader = (SOAPHeader) respSe.getHeader();
然后循环遍历Header的元素写入到respHeader.addChildElement(she);
5、 好了,上面已经写好了WebService的方法,以及请求时读取Header内容的Handler和在响应时写入Header内容的Handler。下面开始写wsdd发布当前WebService。
代码
<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler name="ReadHeaderHandler" type="java:com.hoo.service.handler.ReadHeaderHandler"/> <handler name="WriteHeaderHandler" type="java:com.hoo.service.handler.WriteHeaderHandler"/> <service name="OperaterHeader" provider="java:RPC"> <requestFlow> <handler type="ReadHeaderHandler"/> </requestFlow> <parameter name="className" value="com.hoo.service.OperaterHeaderService" /> <parameter name="allowedMethods" value="*" /> <parameter name="scope" value="request" /> <responseFlow> <handler type="WriteHeaderHandler"/> </responseFlow> </service></deployment>
还是用doc命令发布当前WebService,命令如下:
C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployHeader.wsdd
发布完成后,你会看的
Processing file deployHeader.wsdd
<Admin>Done processing</Admin>
的字样就表示发布成功了,然后在浏览器地址栏输入:
http://localhost:8080/AxisWebService/servlet/AxisServlet
你就可以看到OperaterHandler这个WebService了
6、 OperaterHandler这个WebService成功发布,现在就是要编写客户端代码调用这个WebService,客户端代码比较简单,完整代码如下:
代码
package com.hoo.client;import java.rmi.RemoteException;import java.util.Date;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import javax.xml.soap.SOAPException;import org.apache.axis.Message;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.message.MessageElement;import org.apache.axis.message.SOAPEnvelope;import org.apache.axis.message.SOAPHeaderElement;/** * <b>function:</b>Header操作WebService客户端 * @author hoojo * @createDate Dec 19, 2010 2:18:51 PM * @file OperaterHeaderClient.java * @package com.hoo.client * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class OperaterHeaderClient { public static void main(String[] args) throws SOAPException, ServiceException, RemoteException { String url = "http://localhost:8080/AxisWebService/services/OperaterHeader"; //创建服务 Service service = new Service(); //创建调用句柄 Call call = (Call) service.createCall(); //设置请求地址 call.setTargetEndpointAddress(url); call.setOperationName(new QName("readHeader")); /** 添加请求的header */ //父节点,根节点 SOAPHeaderElement el = new SOAPHeaderElement(new QName("soap", "Header")); //文本节点 MessageElement msgEl = new MessageElement(new QName("ServiceName"), "ReadHeaderService"); el.addChild(msgEl); //文本节点 el.addChild(new MessageElement(new QName("CreateDate"), new Date())); el.addChild(new MessageElement(new QName("service", "Version"), "1.0")); //子元素 msgEl = new MessageElement(new QName("author")); msgEl.addChild(new MessageElement(new QName("name"), "axis")); msgEl.addChild(new MessageElement(new QName("age"), "14")); el.addChild(msgEl); //子元素 msgEl = new MessageElement(new QName("copyRight")); msgEl.addChild(new MessageElement(new QName("year"), "2010")); msgEl.addChild(new MessageElement(new QName("number"), "123123123")); el.addChild(msgEl); el.addChild(new MessageElement(new QName("Tel"), "555666442")); System.out.println(el.toString()); //设置请求的header call.addHeader(el); /** * 注意:在请求readHeader方法的时候,也就是invoke执行的时候。会调用ReadHeaderHandler这个handler * 在请求完成后,准备返回值的时候或是说函数在运行完成了后。就会触发WriteHeaderHandler */ call.invoke(new Object[] {}); /** 响应的header */ Message msg = call.getResponseMessage(); SOAPEnvelope se = msg.getSOAPEnvelope(); System.out.println("responseMessage:" + se.getHeader()); }}
call.getResponseMessage();可以得到服务器响应的Header的信息
运行后你可以看到客户端控制台会输出:
<ns1:Header soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="soap" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ServiceName xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">ReadHeaderService</ServiceName><CreateDate xsi:type="xsd:dateTime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">2010-12-19T06:22:59.931Z</CreateDate><ns2:Version xsi:type="xsd:string" xmlns:ns2="service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">1.0</ns2:Version><author><name xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">axis</name><age xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">14</age></author><copyRight><year xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">2010</year><number xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">123123123</number></copyRight><Tel xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">555666442</Tel></ns1:Header> responseMessage:<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ns1:Header soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="soap"><ServiceName xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ReadHeaderService</ServiceName><CreateDate xsi:type="xsd:dateTime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2010-12-19T06:22:59.931Z</CreateDate><ns2:Version xsi:type="soapenc:string" xmlns:ns2="service" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1.0</ns2:Version><author><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">axis</name><age xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">14</age></author><copyRight><year xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2010</year><number xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">123123123</number></copyRight><Tel xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">555666442</Tel></ns1:Header></soapenv:Header>
responseMessage前面的内容是客户端将会写入到Header中的xml内容,而responseMessage后面的内容就是响应的Header的内容,这段内容是WriteHeaderHandler写入到ResponseMessage中的。
再看看服务器端控制台的内容:
父节点:Header, 节点:ServiceName, 值:ReadHeaderService
父节点:Header, 节点:CreateDate, 值:2010-12-19T06:22:59.931Z
父节点:Header, 节点:Version, 值:1.0
父父节点:Header, 父节点:author, 节点:name##name, 值:axis##axis
父父节点:Header, 父节点:author, 节点:age##age, 值:14##14
父父节点:Header, 父节点:copyRight, 节点:year##year, 值:2010##2010
父父节点:Header, 父节点:copyRight, 节点:number##number, 值:123123123##123123123
父节点:Header, 节点:Tel, 值:555666442
ns1:Header
header Info:<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><ns1:Header soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="soap"><ServiceName xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ReadHeaderService</ServiceName><CreateDate xsi:type="xsd:dateTime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2010-12-19T06:22:59.931Z</CreateDate><ns2:Version xsi:type="soapenc:string" xmlns:ns2="service" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1.0</ns2:Version><author><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">axis</name><age xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">14</age></author><copyRight><year xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2010</year><number xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">123123123</number></copyRight><Tel xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">555666442</Tel></ns1:Header></soapenv:Header>
上面的文本内容是ReadHeaderHandler读取客户端的Header的内容和我们定制的xml的内容是一致的。而后面的xml能入是WriteHeaderHandler中输出的内容。
相关推荐
本文将深入探讨如何在Axis1.4中实现头部鉴权,包括其实现类模板的详细介绍。 ### 标题解析:“Axis1.4如何实现头部鉴权” 标题明确了讨论的主题——在Apache Axis 1.4中实现基于HTTP头部的鉴权机制。头部鉴权是一...
SOAP消息由三部分组成:Envelope(信封),Header(头部)和Body(主体)。Envelope定义了消息结构,Header包含附加信息,Body则是实际的数据内容。 七、数据绑定 Axis支持多种数据绑定机制,如JAXB(Java ...
标题和描述提到的"Axis2版本的头鉴权应用"着重讨论的是如何在Axis2中实现基于HTTP头部的认证机制,以确保只有经过授权的用户可以访问服务。 头鉴权(Header Authentication)是一种常见的身份验证方法,它通过HTTP...
- **消息格式**:SOAP消息由信封(Envelope)、头部(Header)、主体(Body)和错误(Fault)四部分组成。 - **传输协议**:虽然SOAP可以使用多种传输协议,但在实践中,HTTP是最常用的协议之一。 #### Axis2详解 ...
2. "如何用Axis2开发和部署Web服务.doc"将详细讲解如何使用Apache Axis2这个流行的SOAP服务实现工具创建和部署Web服务。 3. "struts2注解使用.doc"将介绍Struts2框架中注解的详细用法,帮助开发者理解如何在无XML...
SOAP消息通常包含三个部分:Header(头部)、Body(主体)和Fault(错误)。在本题中,我们将创建一个SOAP消息,其中Body部分包含两个整数参数和一个求和的结果。 4. **Axis框架**: Axis是Apache组织开发的一个...
头部信息包含了许多元数据,如道头信息(Trace Header)、文件头信息(File Header)等,这些信息对于理解数据的采集环境和处理历史至关重要。 2. **SegyMAT工具包**:SegyMAT是Matlab中的一个第三方工具包,专为...
SOAP消息包含三个主要部分:头部(Header)、主体(Body)和封装(Envelope)。主体通常包含实际的业务数据,而头部可以包含与消息处理相关的附加信息。 在Java世界中,`Axis`是一个流行的开源工具,用于创建和部署...
这里我们以“Authorization”为例,展示了如何读取并输出此头部信息。 #### 实现要点 1. **确定需求**:明确是否真的只需要解析SOAP消息头,这有助于简化代码设计。 2. **正确配置servlet**:确保servlet映射正确...
客户端在调用受保护的WebService时,需要按照以下步骤进行操作: 1. **首次请求**:客户端发送请求到服务器,由于缺少必要的认证信息,服务器会返回HTTP状态码401,并携带`WWW-Authenticate`头部。 2. **提取验证...
2. **头部(Header)**: 可选部分,包含了处理消息所需的信息。 3. **主体(Body)**: 包含了实际的请求或响应数据。 #### XML在Webservice中的角色 XML在Webservice中扮演着至关重要的角色,它不仅用于消息的封装...
Envelope定义了消息的结构,Header包含了处理消息所需的信息,而Body则包含了实际的业务数据。 现在,当我们谈论“webservice soap抓取工具”时,我们指的是能够捕获并分析SOAP请求和响应的工具。这类工具对于调试...
- SOAP由三部分组成:Envelope(信封)、Header(头部)和Body(主体)。Envelope定义消息结构,Header包含处理信息,Body则包含实际的业务数据。 - SOAP示例通常包括XML格式的请求和响应,这些请求和响应包含了...
SOAP消息通常由四个部分组成:信封(Envelope)、头部(Header)、主体(Body)和故障(Fault)。 ##### WSDL概述 WSDL是一个用于描述Web服务的接口定义语言。它可以指定服务的位置、消息格式和操作细节。WSDL文档...
- **SOAP消息结构**:包括信封(Envelope)、头部(Header)、体部(Body)和错误(Fault)四个部分。 - **RPC风格与文档风格**:SOAP支持两种消息传递方式,RPC风格强调过程调用,而文档风格则关注于消息内容。 - *...
SOAP消息主要由三部分组成:Header(头部),Body(主体)和Envelope(封装)。SOAP允许开发者在HTTP、SMTP等传输协议上进行数据交换,实现了远程调用功能。 2. WSDL(Web Services Description Language):WSDL是...
SOAP消息通常包含三个主要部分:头部(Header)、主体(Body)和封装(Envelope),并且可以通过HTTP、SMTP等传输协议进行发送。 **三、WSDL** WSDL是一种XML格式,用于定义Web服务的接口,包括服务的位置、提供的...
- SOAP消息由信封(Envelope)、头部(Header)、主体(Body)以及附件(Attachment)组成。 3. **WSDL文件** - WSDL(Web Services Description Language)是一种用于描述WebService的XML格式文件。 - 它包含了...
Envelope定义了消息的结构,Header可以包含如身份验证、路由等附加信息,Body则包含实际的业务数据和操作请求。 SAAJ(SOAP with Attachments API for Java)是Java平台上的一个API,用于处理SOAP消息,特别是那些...
2. **用AXIS发布一个WebService**:Apache Axis是一个流行的开源WebService框架。 - **发布过程**:通过编写Java类并配置部署描述符来实现WebService的发布。 - **开发客户端**:同样可以使用Axis提供的工具来自动...