/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you 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.
 */

/*
 * XSEC
 *
 * XSECSOAPRequestor:= Interface class used by the XKMS client code to
 *                     perform a SOAP request and receive response.
 *
 *
 * $Id$
 *
 */

#ifndef XSECSOAPREQUESTOR_INCLUDE
#define XSECSOAPREQUESTOR_INCLUDE

#include <xsec/framework/XSECDefs.hpp>

XSEC_DECLARE_XERCES_CLASS(DOMDocument);

/**
 * @brief Interface for SOAP Requests
 * @ingroup interfaces
 *
 * The XKMS client code needs to be able to call on a SOAP requestor
 * implementation that will handle wrapping the request in a SOAP msg
 * and transporting it to the SOAP server.  This class defines the
 * interface used by the client code to make this happen.
 *
 * Implementors need to wrap the passed in DOM document in a SOAP 1.1
 * or SOAP 1.2 msg.  E.g. (SOAP 1.2)
 * \verbatim
   <?xml version='1.0' encoding="utf-8"?>
   <env:Envelope xmlns:env="http://www.w3.org/2002/06/soap-envelope"> 
    <env:Header>
     <env:Body>
       XKMS Request Message element 
     </env:Body>
    </env:Header>
   </env:Envelope>
\endverbatim
 * 
 * SOAP implentors may want/need to add other headers.
 *
 */


class DSIG_EXPORT XSECSOAPRequestor {

public :

	/** @name Constructors and Destructors */
	//@{

	XSECSOAPRequestor() {}
	virtual ~XSECSOAPRequestor() {}

	//@}

	/** @name Interface methods */

	/**
	 * \brief Do a SOAP request
	 *
	 * Performs a request based on the passed in DOM document and
	 * the indicated URI.  The function is expected to return a pointer
	 * to the parsed result message (with the SOAP envelope removed)
	 *
	 * The implementing object is expected to know how to get the
	 * wrapped message to the server that will process the request
	 *
	 * @param request The DOM document containing the message to be 
	 * wrapped and sent.
	 * @returns The DOM document representing the result, with all
	 * SOAP headers removed
	 */

	virtual XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *
		doRequest(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument * request) = 0;

};


#endif /* XSECSOAPREQUESTOR_INCLUDE */

