首页 > 解决方案 > Extract SOAP custom header information

问题描述

I want to read request header from SOAP incoming request in my Java code for some authorization purpose. I found few work-arounds like using SOAPHandlers and . Code as below :

`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;
  }  }`

I ma really curious about to have some other simple alternative rather than writing entire handler just for fetching custom header tag. Is this the only way to read SOAP request header ? Any leads are really appreciated

标签: web-servicessoap

解决方案


推荐阅读