All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.xml.wss.core.SecurityContextTokenImpl Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show newest version
/*
 * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/*
 * SecurityContextTokenHeaderBlock.java
 *
 * Created on December 15, 2005, 6:41 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.sun.xml.wss.core;

import com.sun.xml.ws.security.SecurityContextToken;
import com.sun.xml.wss.XWSSecurityException;
import com.sun.xml.wss.impl.MessageConstants;
import com.sun.xml.wss.impl.SecurityTokenException;
import com.sun.xml.wss.impl.XMLUtil;
import com.sun.xml.wss.impl.misc.SecurityHeaderBlockImpl;

import java.util.Iterator;
import java.util.List;
import jakarta.xml.soap.SOAPElement;
import jakarta.xml.soap.SOAPException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import java.net.URI;
import java.util.ArrayList;

/**
 *<wsc:SecurityContextToken wsu:Id="..." ...> 
 *    <wsc:Identifier>...</wsc:Identifier> 
 *    <wsc:Instance>...</wsc:Instance> 
 *    ... 
 *</wsc:SecurityContextToken>
 *
 */
public class SecurityContextTokenImpl extends SecurityHeaderBlockImpl 
    implements SecurityContextToken, SecurityToken {
    
    private String securityContextId = null;
    private String instance = null;
    private List extElements = null;
    
    private String wsuId = null;
    
    /**
     *
     * @param element
     * @return
     * @throws XWSSecurityException
     */
    public static SecurityHeaderBlock fromSoapElement(SOAPElement element)
    throws XWSSecurityException {
        return SecurityHeaderBlockImpl.fromSoapElement(
                element, SecurityContextTokenImpl.class);
    }
    
    private Document contextDocument = null;
    
    
    public SecurityContextTokenImpl(
        Document contextDocument, String contextId, String instance, String wsuId, List extElements) throws XWSSecurityException {
        securityContextId = contextId;
        this.instance = instance;
        this.wsuId = wsuId;
        this.extElements = extElements;
        this.contextDocument = contextDocument;
    }
    
    @SuppressWarnings("unchecked")
    public SecurityContextTokenImpl(SOAPElement sct) throws XWSSecurityException {
        
        setSOAPElement(sct);
        
        this.contextDocument = getOwnerDocument();
        
        if (!("SecurityContextToken".equals(getLocalName()) &&
                XMLUtil.inWsscNS(this))) {
            throw new SecurityTokenException(
                    "Expected wsc:SecurityContextToken Element, but Found " + getPrefix() + ":" + getLocalName());
        }
        
        String wsuIdVal = getAttributeNS(MessageConstants.WSU_NS, "Id");
        if (!"".equals(wsuIdVal)) {
            this.wsuId = wsuIdVal;
        }
        
        Iterator children = getChildElements();
        Node object;
        
        while (children.hasNext()) {

            object = (Node)children.next();
            if (object.getNodeType() == Node.ELEMENT_NODE) {
                
                SOAPElement element = (SOAPElement) object;
                if ("Identifier".equals(element.getLocalName()) &&
                        XMLUtil.inWsscNS(element)) {
                     securityContextId = element.getFirstChild().getNodeValue();
                } else if ( "Instance".equals(element.getLocalName()) &&
                        XMLUtil.inWsscNS(element)) {
                    this.instance = element.getFirstChild().getNodeValue();
                } else {
                    if (extElements == null) {
                        extElements = new ArrayList();
                    }
                    extElements.add(object);
                }
            }
        }
        
        if (securityContextId == null) {
            throw new XWSSecurityException("Missing Identifier subelement in SecurityContextToken");
        }
    }
    
    @Override
    public SOAPElement getAsSoapElement() throws XWSSecurityException {
        if ( delegateElement != null )
            return delegateElement;
        
        try {
            setSOAPElement(
                    (SOAPElement) contextDocument.createElementNS(
                    MessageConstants.WSSC_NS,
                    MessageConstants.WSSC_PREFIX + ":SecurityContextToken"));
            /*addNamespaceDeclaration(
                    MessageConstants.WSSE11_PREFIX,
                    MessageConstants.WSS11_SPEC_NS);*/
            addNamespaceDeclaration(
                    MessageConstants.WSSC_PREFIX,
                    MessageConstants.WSSC_NS);
            if (securityContextId == null )  {
                throw new XWSSecurityException("Missing SecurityContextToken Identifier");
            } else {
                addChildElement("Identifier", MessageConstants.WSSC_PREFIX).addTextNode(securityContextId);
            }

            if (this.instance != null) {
                addChildElement("Instance", MessageConstants.WSSC_PREFIX).addTextNode(this.instance);
            }
            
            if (wsuId != null) {
                setWsuIdAttr(this, wsuId);
            }
            
            if (extElements != null) {
                for (int i=0; i




© 2015 - 2024 Weber Informatics LLC | Privacy Policy