检索自定义SOAP标头时,使用SOAPMessage.getSOAPHeader()将Soap Header提取为null。

时间:2019-01-03 06:23:40

标签: java soap header

我正尝试使用链处理程序机制提取自定义SOAP标头,如下所示: 网络服务:

    `@HandlerChain(file="handler-chain.xml")

public class CustomAPI extends SessionBeanBase {
@WebMethod
  public GetBalanceResponse getBalances(
      @WebParam(name="subscriptionId")long subscriptionId,
      @WebParam(name="validityPeriodFromDt")Date validityPeriodFromDt,
      @WebParam(name="validityPeriodToDt")Date validityPeriodToDt) throws APIException
  {
    try {
      GetBalancesItem item = new GetBalancesItem(subscriptionId, validityPeriodFromDt, validityPeriodToDt);
      final BalanceBusinessLogic api = (BalanceBusinessLogic)startCall(RSLogic.class, this, "getBalances");

      BusinessLogicCallable<GetBalancesItem> t = new BusinessLogicCallable<GetBalancesItem>() {
        public Response callBusinessLogic(GetBalancesItem getBalancesItem) throws CCSException, APIException {           
          Date validityPeriodFromDt = getBalancesItem.getValidityPeriodFromDt();
          Date validityPeriodToDt = getBalancesItem.getValidityPeriodToDt();
          long subscriptionId = getBalancesItem.getSubscriptionId();
          return api.checkBalance(subscriptionId, validityPeriodFromDt, validityPeriodToDt); 
        }
      };
      return (GetBalanceResponse)callBusinessLogic(t, item);

    } catch (Throwable e) {
      // Handle exception (and rethrow it hence the need for return null)
      handleExceptions(e);
      return null;
    }
  }`  

处理程序链。 xml为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/javaee_web_services_metadata_handler_2_0.xsd">
    <handler-chain>
        <handler>
            <handler-name>ApiSoapHandler</handler-name>
            <handler-class>com.api.framework.ApiSoapHandler</handler-class>
        </handler>
    </handler-chain>
</handler-chains>

 ApiSOAPhandlercode as:

     public boolean handleMessage(SOAPMessageContext context) {
        logger.debug("Inside ApiSoapHandler");
        try {
          SOAPMessage message = context.getMessage();
          SOAPPart soapPart= message.getSOAPPart();
          SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
          if (soapEnvelope.getHeader() == null) {
            soapEnvelope.addHeader();
          }
       // set the soap header
          SOAPHeader latestSOAPHeader = soapHeader.get();
          if (latestSOAPHeader != null) {
            Iterator iterator = latestSOAPHeader.getChildElements();        
            while(iterator.hasNext()) {
              SOAPHeaderElement soapHeaderElement = (SOAPHeaderElement)iterator.next();
              soapEnvelope.getHeader().addChildElement(soapHeaderElement);
            }
          } 
          message.saveChanges();
          System.out.println("header" + header.getAttribute("token"));
        } catch (Exception e) {
          logger.error("Error occurred while adding credentials to SOAP header.",
              e);
        }
        return true;
      }

问题是我的标头在这里被提取为null。任何人都可以在这里建议如何获取标题。作为参考,这是我的示例SOAP请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bal="http://balance.api.ccs.cerillion.com/">
   <soapenv:Header>
<token>187328364</token>
   <soapenv:Header/>
   <soapenv:Body>
      <bal:getBalances>
         <subscriptionId>664</subscriptionId>

      </bal:getBalances>
   </soapenv:Body>
</soapenv:Envelope>

在提取令牌的同时,我的代码中还是空的。

0 个答案:

没有答案