栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在JAXWS服务器端检索Soap Header

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在JAXWS服务器端检索Soap Header

你可以阅读从SOAP头

SOAPMessageContext
SOAPHandler
类,则值传递给你
@WebService
通过在属性的实现
MessageContext

尽管该

HeaderList
API是特定于JAX-WS参考实现的,但以下示例应可在任何JAX-WS运行时中移植。

例:

Web服务暗示:

package org.example.sampleservice;import javax.annotation.Resource;import javax.jws.HandlerChain;import javax.jws.WebService;import javax.xml.ws.WebServiceContext;@WebService(endpointInterface = "org.example.sampleservice.SampleService")@HandlerChain(file="handlers.xml")public class SampleServiceImpl implements SampleService {    @Resource    private WebServiceContext ctx;    @Override    public String sayHello(String name) {        String usernameFromHeader = (String) ctx.getMessageContext().get("USERNAME");        return "Hello, "     + name     + " (invoked by "     + (usernameFromHeader == null ? "[err or no 'Security' header found]"  : usernameFromHeader) + ")";    }}

处理 程序 链XML( handlers.xml ,与相同的软件包中的文件

SampleServiceImpl.java
):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><javaee:handler-chains      xmlns:javaee="http://java.sun.com/xml/ns/javaee"      xmlns:xsd="http://www.w3.org/2001/XMLSchema">  <javaee:handler-chain>    <javaee:handler>      <javaee:handler-class>org.example.sampleservice.UsernameTokenHandler</javaee:handler-class>    </javaee:handler>  </javaee:handler-chain></javaee:handler-chains>

JAX-WS处理程序类:

package org.example.sampleservice;import java.util.Iterator;import java.util.Set;import javax.xml.namespace.QName;import javax.xml.soap.Node;import javax.xml.soap.SOAPElement;import javax.xml.soap.SOAPHeader;import javax.xml.soap.SOAPHeaderElement;import javax.xml.ws.handler.MessageContext;import javax.xml.ws.handler.MessageContext.Scope;import javax.xml.ws.handler.soap.SOAPHandler;import javax.xml.ws.handler.soap.SOAPMessageContext;public class UsernameTokenHandler implements SOAPHandler<SOAPMessageContext> {    private static final String WSSE_NS_URI = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";    private static final QName QNAME_WSSE_USERNAMETOKEN = new QName(WSSE_NS_URI, "UsernameToken");    private static final QName QNAME_WSSE_USERNAME = new QName(WSSE_NS_URI, "Username");    private static final QName QNAME_WSSE_PASSWORD = new QName(WSSE_NS_URI, "Password");    @Override    public boolean handleMessage(SOAPMessageContext context) {        Boolean outbound = (Boolean) context     .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);        if ((outbound != null) && (!outbound.booleanValue())) { handleInboundMessage(context);        }        return true;    }    private void handleInboundMessage(SOAPMessageContext context) {        String wsseUsername = null;        String wssePassword = null;        try { SOAPHeader header = context.getMessage().getSOAPHeader(); Iterator<?> headerElements = header.examineAllHeaderElements(); while (headerElements.hasNext()) {     SOAPHeaderElement headerElement = (SOAPHeaderElement) headerElements  .next();     if (headerElement.getElementName().getLocalName()  .equals("Security")) {         SOAPHeaderElement securityElement = headerElement;         Iterator<?> it2 = securityElement.getChildElements();         while (it2.hasNext()) {  Node soapNode = (Node) it2.next();  if (soapNode instanceof SOAPElement) {      SOAPElement element = (SOAPElement) soapNode;      QName elementQname = element.getElementQName();      if (QNAME_WSSE_USERNAMETOKEN.equals(elementQname)) {          SOAPElement usernameTokenElement = element;          wsseUsername = getFirstChildElementValue(usernameTokenElement, QNAME_WSSE_USERNAME);          wssePassword = getFirstChildElementValue(usernameTokenElement, QNAME_WSSE_PASSWORD);          break;      }  }  if (wsseUsername != null) {      break;  }         }     }     context.put("USERNAME", wsseUsername);     context.setScope("USERNAME", Scope.APPLICATION);     context.put("PASSWORD", wssePassword);     context.setScope("PASSWORD", Scope.APPLICATION); }        } catch (Exception e) { System.out.println("Error reading SOAP message context: " + e); e.printStackTrace();        }    }    private String getFirstChildElementValue(SOAPElement soapElement, QName qNameToFind) {        String value = null;        Iterator<?> it = soapElement.getChildElements(qNameToFind);        while (it.hasNext()) { SOAPElement element = (SOAPElement) it.next(); //use first value = element.getValue();        }        return value;    }    @Override    public boolean handleFault(SOAPMessageContext context) {        return false;    }    @Override    public void close(MessageContext context) {    }    @Override    public Set<QName> getHeaders() {        return null;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号