/* example3.cpp Example UDDI V2 Client -------------------------------------------------------------------------------- gSOAP XML Web services tools Copyright (C) 2004-2005, Robert van Engelen, Genivia Inc. All Rights Reserved. This software is released under one of the following two licenses: GPL or Genivia's license for commercial use. -------------------------------------------------------------------------------- GPL license. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Author contact information: engelen@genivia.com / engelen@acm.org -------------------------------------------------------------------------------- A commercial use license is available from Genivia, Inc., contact@genivia.com -------------------------------------------------------------------------------- */ #include "pubH.h" const char *server = "https://uddi.xmethods.net/publish"; const char *userid = "..."; // user ID to access UDDI server const char *passwd = "..."; // password to access UDDI server int main(int argc, char **argv) { // Create a gSOAP context struct soap *soap = soap_new(); // Setup SSL context (optional) to verify server's credentials if (soap_ssl_client_context(soap, SOAP_SSL_DEFAULT, NULL, NULL, "cacerts.pem", NULL, NULL)) { soap_print_fault(soap, stderr); exit(1); } // Step 1: Get an authorization token from the UDDI server uddi2__get_USCOREauthToken get_authToken(soap, userid, passwd); uddi2__authToken *authToken = get_authToken.send(server); // Check if authorized if (!authToken) { soap_print_fault(soap, stderr); exit(1); } // Authorization info provided by server for this session char *authInfo = authToken->authInfo; // Step 2: Create a tModel for the WSDL to be published uddi2__tModel tModel; tModel.soap_default(soap); // Create the tModel and service name tModel.name = soap_new_uddi2__name(soap, -1); tModel.name->__item = "..."; tModel.name->xml__lang_ = "en"; // Create XMethods description elements (see http://www.xmethods.net/ve2/UDDI.po) uddi2__description *description = soap_new_uddi2__description(soap, 6); description[0].__item = "SHORT DESCRIPTION: ..."; description[0].xml__lang_ = "en"; description[1].__item = "SHORT DESCRIPTION: ..."; description[1].xml__lang_ = "en"; description[2].__item = "USAGE NOTES: ..."; description[2].xml__lang_ = "en"; description[3].__item = "HOMEPAGE URL: ..."; description[3].xml__lang_ = "en"; description[4].__item = "CONTACT EMAIL: ..."; description[4].xml__lang_ = "en"; description[5].__item = "IMPLEMENTATION: ..."; description[5].xml__lang_ = "en"; // Add the four description elements to the tModel tModel.description.push_back(description + 0); tModel.description.push_back(description + 1); tModel.description.push_back(description + 2); tModel.description.push_back(description + 4); // Add an overviewDoc element with description and overviewURL tModel.overviewDoc = soap_new_uddi2__overviewDoc(soap, -1); tModel.overviewDoc->soap_default(soap); tModel.overviewDoc->description.push_back(soap_new_uddi2__description(soap, -1)); tModel.overviewDoc->description[0]->__item = "WSDL source document"; tModel.overviewDoc->description[0]->xml__lang_ = "en"; tModel.overviewDoc->overviewURL = "http://.../my.wsdl#bindingName"; // Omit identifier bag tModel.identifierBag = NULL; // Add a category with a WSDL-specific keyedReference tModel.categoryBag = soap_new_uddi2__categoryBag(soap, -1); tModel.categoryBag->soap_default(soap); tModel.categoryBag->keyedReference.push_back(soap_new_uddi2__keyedReference(soap, -1)); tModel.categoryBag->keyedReference[0]->tModelKey = "..."; tModel.categoryBag->keyedReference[0]->keyName = "uddi-org:types"; tModel.categoryBag->keyedReference[0]->keyValue = "wsdlSpec"; tModel.authorizedName = "..."; tModel.operator_ = "..."; tModel.tModelKey = "..."; // Save the tModel uddi2__save_USCOREtModel save_tModel(soap, tModel); uddi2__tModelDetail *tModelDetail = save_tModel.send(server, authInfo); // Step 3: Create a new service to be published uddi2__businessService service; service.soap_default(soap); // Service name is the tModel name (XMethods) service.name.push_back(tModel.name); // Add two description elements to the service service.description.push_back(description + 4); service.description.push_back(description + 5); // Create binding template uddi2__bindingTemplate bindingTemplate; bindingTemplate.soap_default(soap); bindingTemplate.tModelInstanceDetails = soap_new_uddi2__tModelInstanceDetails(soap, -1); bindingTemplate.tModelInstanceDetails->tModelInstanceInfo.push_back(soap_new_uddi2__tModelInstanceInfo(soap, -1)); bindingTemplate.tModelInstanceDetails->tModelInstanceInfo[0]->instanceDetails = NULL; bindingTemplate.tModelInstanceDetails->tModelInstanceInfo[0]->tModelKey = tModel.tModelKey; bindingTemplate.accessPoint = soap_new_uddi2__accessPoint(soap, -1); bindingTemplate.accessPoint->__item = "..."; bindingTemplate.accessPoint->URLType = uddi2__URLType__http; bindingTemplate.hostingRedirector = NULL; bindingTemplate.serviceKey = "..."; bindingTemplate.bindingKey = "..."; // Add binding Template to service service.bindingTemplates = soap_new_uddi2__bindingTemplates(soap, -1); service.bindingTemplates->soap_default(soap); service.bindingTemplates->bindingTemplate.push_back(&bindingTemplate); service.categoryBag = NULL; service.serviceKey = "..."; service.businessKey = "..."; // Save the service uddi2__save_USCOREservice save_service(soap, service); uddi2__serviceDetail *serviceDetail = save_service.send(server, authInfo); // Step 4: Discard authorization token uddi2__discard_USCOREauthToken discard_authToken(soap, authInfo); uddi2__dispositionReport *dispositionReport = discard_authToken.send(server); // Remove deserialized objects soap_destroy(soap); // Remove temporary data soap_end(soap); // Detach and free context soap_done(soap); free(soap); return 0; }