/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.xml.ws.handler.soap;

import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import java.util.Set;

public interface SOAPMessageContext
        extends MessageContext {

    public abstract SOAPMessage getMessage();

    public abstract void setMessage(SOAPMessage soapmessage);

    public abstract Object[] getHeaders(QName qname, JAXBContext jaxbcontext, boolean flag);

    public abstract Set<java.net.URI> getRoles();
}
