`
7wolfs
  • 浏览: 179538 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用Spring 的Interceptor 机制读取SOAP header时,需要注意的问题

阅读更多
使用Spring Interceptor 机制读取Web Service 的SOAP请求时,由于在SOAP请求里,xml的元素之间可能会包含空格、回车符、制表符,所以在用dom node读取SOAP xml时,需要对读取的当前元素的类型作判断。判断当前元素的类型是ELEMENT_NODE 还是 TEXT_NODE.

处理SOAP请求时,涉及到了如下三种dom的操作方式,
1. org.springframework.ws.context.MessageContext
2. javax.xml.transform.dom.DOMResult
3. org.w3c.dom.NodeList, org.w3c.dom.Node

代码如下:
public boolean handleRequest(MessageContext messageContext, Object endpoint)
			throws Exception {
		// TODO Auto-generated method stub
		Assert.isInstanceOf(SoapMessage.class, messageContext.getRequest());
		SoapMessage request = (SoapMessage) messageContext.getRequest();
        SoapHeader header = request.getSoapHeader();

        String username = "";
        String password = "";
        for (Iterator iterator = header.examineAllHeaderElements(); iterator.hasNext();) {
			SoapHeaderElement headerElement = (SoapHeaderElement) iterator.next();
			NodeList children = ((DOMResult)headerElement.getResult()).getNode().getChildNodes();
			for (int i = 0; i < children.getLength(); i++) {
				if (children.item(i).getNodeType() == Node.ELEMENT_NODE) { 
					Node node = (Node) children.item(i);
					if ("se:user".equalsIgnoreCase(node.getNodeName())) {
						username = node.getChildNodes().item(0).getTextContent();
					} else if ("se:pass".equalsIgnoreCase(node.getNodeName())) {
						password = node.getChildNodes().item(0).getTextContent();
					}
				} else if (children.item(i).getNodeType() == Node.TEXT_NODE) {
	
				} 
			}

		}

		return true;
	}



0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics