提取SOAP自定义标头信息

时间:2019-01-02 12:40:34

标签: web-services soap

出于某些授权目的,我想从Java代码中的SOAP传入请求中读取请求标头。我发现一些变通方法,例如使用SOAPHandlers和。代码如下:

`package com.cerillion.ccs.framework;

import java.util.HashSet;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

import org.apache.log4j.Logger;

public class ApiSoapHandler implements SOAPHandler<SOAPMessageContext>  {
  private static final Logger logger = Logger.getLogger(ApiSoapHandler.class.getName());

  @Override
  public void close(MessageContext arg0) {
    // TODO Auto-generated method stub

  }

  @Override
  public boolean handleFault(SOAPMessageContext context) {
    // TODO Auto-generated method stub
    return false;
  }

  @Override
  public boolean handleMessage(SOAPMessageContext context) {
    logger.debug("Inside ApiSoapHandler");
    try {
      SOAPMessage message = context.getMessage();
      SOAPHeader header = message.getSOAPHeader();

      message.saveChanges();

    } catch (SOAPException e) {
      logger.error("Error occurred while adding credentials to SOAP header.",
          e);
    }
    return true;
  }

  @Override
  public Set<QName> getHeaders() {

   /* QName securityTokenHeader = new QName("urn:com.intertech.secty", "token");
        //new QName(“urn:com.intertech.secty”,“username”);
    HashSet<QName> headers = new HashSet<QName>();
    headers.add(securityTokenHeader);
    return headers;*/
    return null;
  }  }`

我真的很想拥有其他一些简单的选择,而不是仅仅为获取自定义标头标记而编写整个处理程序。这是读取SOAP请求标头的唯一方法吗?任何潜在客户都很感激

0 个答案:

没有答案