读书人

使用Spring 的Interceptor 机制读取SO

发布时间: 2012-10-28 09:54:44 作者: rapoo

使用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 stubAssert.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;}



读书人网 >XML SOAP

热点推荐