/* | |
* Copyright 2003-2004 The Apache Software Foundation. | |
// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved | |
* | |
* 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. | |
* | |
*/ | |
/** | |
* @file Stub.hpp | |
* | |
* Contains the Stub base class that all C++ web service stubs inherit | |
* from. The functions in this Stub base class provides the client | |
* application some added functionality to manipulate the SOAP messages. | |
*/ | |
#ifndef STUB_INCLUDED | |
#define STUB_INCLUDED | |
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ | |
/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE */ | |
/* ---------------------------------------------------------------- */ | |
/* THIS HEADER FILE PATTERNED AFTER CORRESPONDING hpp HEADER FILE. */ | |
/* CHANGES TO hpp HEADER FILE MAY NEED TO BE PROPAGATED HERE AND IN */ | |
/* THE IMPLEMEMTATION OF THE C APIS. */ | |
/* ---------------------------------------------------------------- */ | |
/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE */ | |
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
#include <stdarg.h> | |
#include <axis/client/Call.h> | |
/** | |
* @class Stub | |
* | |
* @brief This is the client Stub base class to be inherited by all stub | |
* classes genarated by WSDL2WS tool. This class acts as the interface | |
* between the users and the Axis C++ engine (client side). Programmer | |
* can use the API defined here to enrich the client application | |
* functionality. Setting transport properties, setting SOAP headers, | |
* setting connection timeout and specifying a proxy on the client stub | |
* is facilitated with this interface. | |
* | |
*/ | |
/** | |
* Constructor. | |
* | |
* @param pcEndPointURI End point URI of the service to connect to. | |
* e.g. http://localhost:8080/axis/services/echo | |
* @param eProtocol The protocol that this stub should use to communicate | |
* with the endpoint. See AXIS_PROTOCOL_TYPE in GDefine.h for | |
* possible values for eProtocol. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubCreate(const char * pcEndPointURI, | |
AXISC_PROTOCOL_TYPE eProtocol); | |
/** | |
* Destructor. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubDestroy(AXISCHANDLE stub); | |
/** | |
* Set end point of service to connect to. | |
* | |
* @param pcEndPointURI End point URI of the service to connect to. | |
* e.g. http://localhost:8080/axis/services/echo | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetEndPoint(AXISCHANDLE stub, const char * pcEndPointURI); | |
/** | |
* Set transport property. | |
* | |
* Handling the semantics of the headers is up to the user. | |
* The user has to make sure that the key:value paires passed to this method | |
* would make sense at transport level. | |
* The Stub class does not validate the key value paires to see if the properties | |
* make sense to the undelying transport. | |
* | |
* Some example transport properties: | |
* <BR> For HTTP: "Accept-Language: da, en-gb;q=0.8, en;q=0.7" | |
* <BR> For HTTP: "Cookie: sessiontoken=123345456;" | |
* <BR> For SMTP: "Reply-To: user@apache.org" | |
* | |
* @param pcKey Header name e.g. "Accept-Language". | |
* Note that the key is not tested for uniqueness. | |
* One can set several values to the same key and they all will | |
* appear in the outgoing transport header. | |
* e.g. If the method is called twise with (k,v1) and (k,v2) | |
* both k:v1 and k:v2 will appear in transport header as | |
* seperate properties. | |
* The exception to this is "Cookie" where multiple cookie values will only result in one "Cookie:" header being sent as is correct for HTTP. | |
* @param pcValue Header value e.g. "da, en-gb;q=0.8, en;q=0.7" | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetTransportProperty(AXISCHANDLE stub, const char * pcKey, | |
const char * pcValue); | |
/** | |
* Get a transport property. | |
* | |
* Returns the value of a transport property based on a key. | |
* | |
* @param key the property's name to search for | |
* @param response set to true searches the response message for the property | |
* set to false searches the send message for the property | |
* @return the value of the property or NULL if it was not found. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
const char * axiscStubGetTransportProperty(AXISCHANDLE stub, const char * key, | |
AxiscBool response); | |
/** | |
* Iterator initiatior for transport property keys | |
* | |
* This method must be called first to initiate access to the list of | |
* transport property keys. If you initialise e.g. response then ensure | |
* that you call this method for outgoing message too if you want the | |
* outgoing message in future calls. | |
* | |
* | |
* @param response whether the response or outgoing message is being used. | |
* @return First transport property key. If there are no transport | |
* properties set, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
const char * axiscStubGetFirstTransportPropertyKey(AXISCHANDLE stub, AxiscBool response); | |
/** | |
* Iterator for transport property keys | |
* | |
* getFirstTransportPropertyKey() method must have been called at least once | |
* before this method is called. If not behaviour is undefined. | |
* | |
* This method advances the iterator by one position. | |
* Repeated calls always retuen the next value. | |
* | |
* @param response whether the response or outgoing message should be used | |
* @return Next transport property key. If there are no transport | |
* properties set or if iterator is at the end of the list, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
const char * axiscStubGetNextTransportPropertyKey(AXISCHANDLE stub, AxiscBool response); | |
/** | |
* Accessor for transport property keys. | |
* | |
* This method gives access to the key corresponding to the transport key | |
* currently being pointed by transport property key iterator. | |
* | |
* getFirstTransportPropertyKey() method must have been called at least once | |
* before this method is called. If not behaviour is undefined. | |
* | |
* This method does not advance the iterator. | |
* Repeated calls always retuen the same key unless | |
* getNextTransportPropertyKey() is called in between. | |
* | |
* @param response whether the response or outgoing message is being used. | |
* @return Current transport property key. If there are no transport | |
* properties set or if iterator is at the end of the list, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
const char * axiscStubGetCurrentTransportPropertyKey(AXISCHANDLE stub, AxiscBool response); | |
/** | |
* Accessor for transport property values. | |
* | |
* This method gives access to the value corresponding to the transport key | |
* currently being pointed by transport property key iterator. | |
* As keys and values are treated as pairs, access to the value field is | |
* based on the access to the key field. | |
* | |
* getFirstTransportPropertyKey() method must have been called at least once | |
* before this method is called. It must be called with the same "response" | |
* value as used here. If not behaviour is undefined. | |
* | |
* This method does not advance the iterator. | |
* Repeated calls always retuen the same value unless | |
* getNextTransportPropertyKey() is called in between. | |
* | |
* @param response whether the response or outgoing message should be used | |
* @return Current transport property value. If there are no transport | |
* properties set or if iterator is at the end of the list, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
const char * axiscStubGetCurrentTransportPropertyValue(AXISCHANDLE stub, AxiscBool response); | |
/** | |
* Deletes the transport property key:value pair currently pointed to by | |
* the iterator. | |
* @param response true if it's the response property or false for the request | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubDeleteCurrentTransportProperty(AXISCHANDLE stub, AxiscBool response); | |
/** | |
* Deletes the given occurance of the transport property key:value pair | |
* corresponding to the given key. | |
* | |
* This method does not advance the iterator in line with the deletes done. | |
* In case you want to access the transport properties after using this | |
* method, it is advisable to reinitialize the iterator using | |
* getFirstTransportPropertyKey(); | |
* However you can use this method despite where the iterator is | |
* pointing currently. | |
* | |
* NOTE: This method is used to delete individual cookies e.g. deleteTransportProperty("myCookie") will delete the cookie "myCookie" only. | |
* This method can also be used to delete all Cookies by doing deleteTransportProperty("Cookie"). | |
* | |
* @param pcKey Key of the transport property key:value pair to be deleted | |
* If the given key is not set currently, nothing will happen. | |
* @param uiOccurance Which occerance of the key to be deleted, because | |
* there can be multiple values for the same key. | |
* Default is to delete the first occurance. | |
* Count starts from 1. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubDeleteTransportProperty(AXISCHANDLE stub, char * pcKey, | |
unsigned int uiOccurance); | |
/** | |
* Sets a property that can be accessed from a handler. | |
* | |
* @param name The name of the property | |
* @param value The value of the property | |
* @param len The length of the value | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetHandlerProperty(AXISCHANDLE stub, AxiscChar * name, | |
void * value, | |
int len); | |
/** | |
* Create and add a SOAP header block to the Stub. | |
* | |
* This will create a header block that would look like the following when | |
* serialized: | |
* \verbatim | |
<th:TestHeader xmlns:th="http://ws.apache.org/axisCppTest/"> | |
</th:TestHeader> | |
\endverbatim | |
* | |
* User must use the IHeaderBlock pointer returned and fill in the header structure. | |
* e.g. To make the SOAP header look like | |
* \verbatim | |
<SOAP-ENV:Header> | |
<th:TestHeader xmlns:th="http://ws.apache.org/axisCppTest/"> | |
<Credentials> | |
<username>Test User</username> | |
<password>Test Password</password> | |
</Credentials> | |
</th:TestHeader> | |
</SOAP-ENV:Header> | |
\endverbatim | |
* the following code segment could be used | |
* <code> | |
* | |
* IHeaderBlock *phb = ws.createSOAPHeaderBlock("TestHeader", | |
* "http://ws.apache.org/axisCppTest/", | |
* "th"); | |
* | |
* | |
* //create parent node | |
* | |
* BasicNode *parentNode = phb->createChild(ELEMENT_NODE); | |
* | |
* parentNode->setLocalName("Credentials"); | |
* | |
* | |
* //create child node | |
* | |
* BasicNode *childNode = phb->createChild(ELEMENT_NODE); | |
* | |
* childNode->setLocalName("username"); | |
* | |
* | |
* //create char node for value | |
* | |
* BasicNode *valueNode = phb->createChild(CHARACTER_NODE); | |
* | |
* valueNode->setValue("Test User"); | |
* | |
* | |
* //buld node tree | |
* | |
* childNode->addChild(valueNode); | |
* | |
* parentNode->addChild(childNode); | |
* | |
* | |
* //add another node set | |
* | |
* childNode = phb->createChild(ELEMENT_NODE); | |
* | |
* childNode->setLocalName("password"); | |
* | |
* | |
* valueNode = phb->createChild(CHARACTER_NODE); | |
* | |
* valueNode->setValue("Test Password"); | |
* | |
* | |
* childNode->addChild(valueNode); | |
* | |
* parentNode->addChild(childNode); | |
* | |
* | |
* phb->addChild(parentNode); | |
* </code> | |
* | |
* @param pachLocalName Local tag name of the SOAP header. e.g. TestHeader | |
* @param pachPrefix Prefix to be used in XML represenation of SOAP header | |
* e.g. th | |
* @param pachUri Namespace URI to be used in SOAP header. | |
e.g http://ws.apache.org/axisCppTestHeader/ | |
* | |
* @return Pointer to the creater SOAP header block. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubCreateSOAPHeaderBlock(AXISCHANDLE stub, AxiscChar * pachLocalName, | |
AxiscChar * pachUri, | |
AxiscChar * pachPrefix); | |
/** | |
* Iterator initiatior for SOAP header blocks | |
* | |
* This method must be called first to initiate access to the list of | |
* SOAP header blocks. | |
* | |
* @return First SOAP header block pointer. If there are no SOAP header | |
* blocks set, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubGetFirstSOAPHeaderBlock(AXISCHANDLE stub); | |
/** | |
* Iterator for SOAP header blocks | |
* | |
* getFirstSOAPHeaderBlock() method must have been called at least once | |
* before this method is called. If not behaviour is undefined. | |
* | |
* This method advances the iterator by one position. | |
* Repeated calls always retuen the next value. | |
* | |
* @return Next SOAP header block pointer. If there are no SOAP header | |
* blocks set or if iterator is at the end of the list, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubGetNextSOAPHeaderBlock(AXISCHANDLE stub); | |
/** | |
* Accessor for SOAP header blocks | |
* | |
* This method gives access to the SOAP header block pointer corresponding | |
* to the SOAP header block currently being pointed by SOAP header blocks | |
* iterator. | |
* | |
* getFirstSOAPHeaderBlock() method must have been called at least once | |
* before this method is called. If not behaviour is undefined. | |
* | |
* This method does not advance the iterator. | |
* Repeated calls always retuen the same key unless | |
* getNextSOAPHeaderBlock() is called in between. | |
* | |
* @return Current SOAP header block pointer. If there are no SOAP header | |
* block set or if iterator is at the end of the list, returns NULL. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubGetCurrentSOAPHeaderBlock(AXISCHANDLE stub); | |
/** | |
* Deletes the SOAP header block currently pointed to by | |
* the iterator. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubDeleteCurrentSOAPHeaderBlock(AXISCHANDLE stub); | |
/** | |
* Deletes the given SOAP header block pointer from the current list of | |
* SOAP header blocks. | |
* | |
* This method does a pointer comparison. It does not compare the contents | |
* within objects. | |
* Hence it is expected that either the pointer returned by the | |
* create method or by one of the iterator methods would be used with | |
* this method. | |
* | |
* This method does not advance the iterator in line with the deletes done. | |
* In case you want to access the SOAP header blocks after using this | |
* method, it is advisable to reinitialize the iterator using | |
* getFirstSOAPHeaderBlock(); | |
* However you can use this method despite where the iterator is | |
* pointing currently. | |
* | |
* @param pHeaderBlock Pointer of the header block to be deleted. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubDeleteSOAPHeaderBlock(AXISCHANDLE stub, AXISCHANDLE pHeaderBlock); | |
/** | |
* Set proxy server and port for transport. | |
* | |
* @param pcProxyHost Host name of proxy server | |
* @param uiProxyPort Port of proxy server | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetProxy(AXISCHANDLE stub, const char * pcProxyHost, | |
unsigned int uiProxyPort); | |
/** | |
* Set transport timeout. | |
* | |
* @param lSeconds Timeout in seconds. | |
* If lSeconds is 0, then the transport will assume no | |
* timeout. Hence you want to reset a timeout already set | |
* use 0. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetTransportTimeout(AXISCHANDLE stub, long lSeconds); | |
/** | |
* Set transport connect timeout. | |
* | |
* @param lSeconds Timeout in seconds. | |
* If lSeconds is 0, then the transport will assume no | |
* timeout. Hence you want to reset a timeout already set | |
* use 0. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetTransportConnectTimeout(AXISCHANDLE stub, long lSeconds); | |
/** | |
* Get the status of the stub to see any error situation | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
int axiscStubGetStatus(AXISCHANDLE stub); | |
/** | |
* Set whether to Maintain session with service ot not. | |
* @param bSession - true if session should be maintained. False otherwise. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetMaintainSession(AXISCHANDLE stub, AxiscBool bSession); | |
/** | |
* Set transport protocol to be used by the transport. | |
* @param eProtocol - protocol to use | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetTransportProtocol(AXISCHANDLE stub, AXISC_PROTOCOL_TYPE eProtocol); | |
/** | |
* Get transport protocol being used by the transport. | |
* @return Protocol used by transport | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISC_PROTOCOL_TYPE axiscStubGetTransportProtocol(AXISCHANDLE stub); | |
/** | |
* Sets the username to be used for basic authentication | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetUsername(AXISCHANDLE stub, const char * pcUsername); | |
/** | |
* Sets the password to be used for basic authentication | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetPassword(AXISCHANDLE stub, const char * pcPassword); | |
/** | |
* Sets the username to be used for Proxy authentication | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetProxyUsername(AXISCHANDLE stub, const char * pcProxyUsername); | |
/** | |
* Sets the password to be used for Proxy authentication | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetProxyPassword(AXISCHANDLE stub, const char * pcProxyPassword); | |
/** | |
* Call object of the Stub. This is the point of access to the internals | |
* of the Axis engine. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubGetCall(AXISCHANDLE stub); | |
/** | |
* Creates an ISoapAttachment which represents an attachment. The ISoapAttachment should be passed as | |
* an attachmment parameter to a web service. The storage associated with the ISoapAttachment will be | |
* automatically deleted by Axis C++ if it is passed as a parameter to a web service. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
AXISCHANDLE axiscStubCreateSoapAttachment(AXISCHANDLE stub); | |
/** | |
* Set SSL configuration properties. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetSecure(AXISCHANDLE stub, char * pszArguments, | |
... ); | |
/** | |
* Set pointer to exception handler function for stub object. | |
* This function was added in support of the c-Binding implementation. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetCExceptionHandler(AXISCHANDLE stub, void * pExceptionHandler); | |
/** | |
* Get pointer to exception handling function for call object. | |
* This function was added in support of the c-Binding implementation. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void * axiscStubGetCExceptionHandler(AXISCHANDLE stub); | |
/** | |
* Apply user set preferences to each call made on the Stub object. | |
* This method is required because Axis engine holds only part of the state | |
* with refereance to subsequent calls on the same Stub object. | |
* Foxing this approach would make the engine much more efficient. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubApplyUserPreferences(AXISCHANDLE stub); | |
/** | |
* Apply SSL configuration properties. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubIncludeSecure(AXISCHANDLE stub); | |
/** | |
* Set SOAP Headers stored in m_vSOAPHeaderBlock vector. | |
* Called by applyUserPreferences for each and every method invocation. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetSOAPHeaders(AXISCHANDLE stub); | |
/** | |
* Check for extraneous elements. Called at the end of SOAP processing | |
* to ensure that there are no extraneous elements. Will throw an | |
* exception if extraneous elements are detected. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubCheckForExtraneousElements(AXISCHANDLE stub); | |
/** | |
* ============= | |
* Following is not in stub C++ class but is here to make things easier for C users. | |
* ============= | |
*/ | |
/** | |
* Indicates whether transport is to automatically handle http redirects. | |
* By default, redirects are not handled by the transport. If enabled, | |
* auto-redirect will only occur when going from http to http or https to https. | |
* | |
* @param handleRedirect false=no auto-redirect. true=handle redirect automatically. | |
* @param maxCount how many redirects to follow. Default is 1. A value less than 1 | |
* is the same as setting handleRedirect to false. | |
* | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubSetTransportAutoRedirect(AXISCHANDLE stub, AxiscBool handleRedirect, int maxCount); | |
/** | |
* Add namespace to SOAP header. | |
* | |
* @param pUri The namespace uri . | |
* @param pPrefix The prefix to associate with the uri. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubAddNamespaceToSOAPHeader(AXISCHANDLE stub, | |
const AxiscChar * pUri, | |
const AxiscChar * pPrefix); | |
/** | |
* Clears SOAP header namespaces. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubClearSOAPHeaderNamespaces(AXISCHANDLE stub); | |
/** | |
* Add attribute to SOAP header. | |
* | |
* @param pLocalname The local name of the Attribute. | |
* @param pPrefix The prefix of the Attribute. | |
* @param pValue The value of the Attribute. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubAddAttributeToSOAPHeader(AXISCHANDLE stub, | |
const AxiscChar * pLocalname, | |
const AxiscChar * pPrefix, | |
const AxiscChar * pValue); | |
/** | |
* Clears SOAP header attributes. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubClearSOAPHeaderAttributes(AXISCHANDLE stub); | |
/** | |
* Add namespace to SOAP body. | |
* | |
* @param pUri The namespace uri . | |
* @param pPrefix The prefix to associate with the uri. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubAddNamespaceToSOAPBody(AXISCHANDLE stub, | |
const AxiscChar * pUri, | |
const AxiscChar * pPrefix); | |
/** | |
* Clears SOAP body namespaces. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubClearSOAPBodyNamespaces(AXISCHANDLE stub); | |
/** | |
* Add attribute to SOAP body. | |
* | |
* @param pLocalname The local name of the Attribute. | |
* @param pPrefix The prefix of the Attribute. | |
* @param pUri The namespace uri of the Attribute. | |
* @param pValue The value of the Attribute. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubAddAttributeToSOAPBody(AXISCHANDLE stub, | |
const AxiscChar * pLocalname, | |
const AxiscChar * pPrefix, | |
const AxiscChar * pValue); | |
/** | |
* Clears SOAP body attributes. | |
*/ | |
AXISC_STORAGE_CLASS_INFO | |
void axiscStubClearSOAPBodyAttributes(AXISCHANDLE stub); | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* STUB_INCLUDED */ |