#import "PowerBillSearchService.h"
#import <libxml/xmlstring.h>
#if TARGET_OS_IPHONE
#import <CFNetwork/CFNetwork.h>
#endif
@implementation PowerBillSearchService_POWERBILL
- (id)init
{
if((self = [super init])) {
MONTHNAME = 0;
MONTHNUMBER = 0;
YEARNUMBER = 0;
ELECTRICCOST = 0;
ELECTRICQTY = 0;
GASCOST = 0;
GASQTY = 0;
TOTALCOST = 0;
TEMPAVG = 0;
TEMPHIGH = 0;
TEMPLOW = 0;
}
return self;
}
- (void)dealloc
{
if(MONTHNAME != nil) [MONTHNAME release];
if(MONTHNUMBER != nil) [MONTHNUMBER release];
if(YEARNUMBER != nil) [YEARNUMBER release];
if(ELECTRICCOST != nil) [ELECTRICCOST release];
if(ELECTRICQTY != nil) [ELECTRICQTY release];
if(GASCOST != nil) [GASCOST release];
if(GASQTY != nil) [GASQTY release];
if(TOTALCOST != nil) [TOTALCOST release];
if(TEMPAVG != nil) [TEMPAVG release];
if(TEMPHIGH != nil) [TEMPHIGH release];
if(TEMPLOW != nil) [TEMPLOW release];
[super dealloc];
}
- (NSString *)nsPrefix
{
return @"PowerBillSearchService";
}
- (xmlNodePtr)xmlNodeForDoc:(xmlDocPtr)doc elementName:(NSString *)elName elementNSPrefix:(NSString *)elNSPrefix
{
NSString *nodeName = nil;
if(elNSPrefix != nil && [elNSPrefix length] > 0)
{
nodeName = [NSString stringWithFormat:@"%@:%@", elNSPrefix, elName];
}
else
{
nodeName = [NSString stringWithFormat:@"%@:%@", @"PowerBillSearchService", elName];
}
xmlNodePtr node = xmlNewDocNode(doc, NULL, [nodeName xmlString], NULL);
[self addAttributesToNode:node];
[self addElementsToNode:node];
return node;
}
- (void)addAttributesToNode:(xmlNodePtr)node
{
}
- (void)addElementsToNode:(xmlNodePtr)node
{
if(self.MONTHNAME != 0) {
xmlAddChild(node, [self.MONTHNAME xmlNodeForDoc:node->doc elementName:@"MONTHNAME" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.MONTHNUMBER != 0) {
xmlAddChild(node, [self.MONTHNUMBER xmlNodeForDoc:node->doc elementName:@"MONTHNUMBER" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.YEARNUMBER != 0) {
xmlAddChild(node, [self.YEARNUMBER xmlNodeForDoc:node->doc elementName:@"YEARNUMBER" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.ELECTRICCOST != 0) {
xmlAddChild(node, [self.ELECTRICCOST xmlNodeForDoc:node->doc elementName:@"ELECTRICCOST" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.ELECTRICQTY != 0) {
xmlAddChild(node, [self.ELECTRICQTY xmlNodeForDoc:node->doc elementName:@"ELECTRICQTY" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.GASCOST != 0) {
xmlAddChild(node, [self.GASCOST xmlNodeForDoc:node->doc elementName:@"GASCOST" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.GASQTY != 0) {
xmlAddChild(node, [self.GASQTY xmlNodeForDoc:node->doc elementName:@"GASQTY" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.TOTALCOST != 0) {
xmlAddChild(node, [self.TOTALCOST xmlNodeForDoc:node->doc elementName:@"TOTALCOST" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.TEMPAVG != 0) {
xmlAddChild(node, [self.TEMPAVG xmlNodeForDoc:node->doc elementName:@"TEMPAVG" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.TEMPHIGH != 0) {
xmlAddChild(node, [self.TEMPHIGH xmlNodeForDoc:node->doc elementName:@"TEMPHIGH" elementNSPrefix:@"PowerBillSearchService"]);
}
if(self.TEMPLOW != 0) {
xmlAddChild(node, [self.TEMPLOW xmlNodeForDoc:node->doc elementName:@"TEMPLOW" elementNSPrefix:@"PowerBillSearchService"]);
}
}
/* elements */
@synthesize MONTHNAME;
@synthesize MONTHNUMBER;
@synthesize YEARNUMBER;
@synthesize ELECTRICCOST;
@synthesize ELECTRICQTY;
@synthesize GASCOST;
@synthesize GASQTY;
@synthesize TOTALCOST;
@synthesize TEMPAVG;
@synthesize TEMPHIGH;
@synthesize TEMPLOW;
/* attributes */
- (NSDictionary *)attributes
{
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
return attributes;
}
+ (PowerBillSearchService_POWERBILL *)deserializeNode:(xmlNodePtr)cur
{
PowerBillSearchService_POWERBILL *newObject = [[PowerBillSearchService_POWERBILL new] autorelease];
[newObject deserializeAttributesFromNode:cur];
[newObject deserializeElementsFromNode:cur];
return newObject;
}
- (void)deserializeAttributesFromNode:(xmlNodePtr)cur
{
}
- (void)deserializeElementsFromNode:(xmlNodePtr)cur
{
for( cur = cur->children ; cur != NULL ; cur = cur->next ) {
if(cur->type == XML_ELEMENT_NODE) {
xmlChar *elementText = xmlNodeListGetString(cur->doc, cur->children, 1);
NSString *elementString = nil;
if(elementText != NULL) {
elementString = [NSString stringWithCString:(char*)elementText encoding:NSUTF8StringEncoding];
[elementString self]; // avoid compiler warning for unused var
xmlFree(elementText);
}
if(xmlStrEqual(cur->name, (const xmlChar *) "MONTHNAME")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSString class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.MONTHNAME = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "MONTHNUMBER")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.MONTHNUMBER = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "YEARNUMBER")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.YEARNUMBER = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "ELECTRICCOST")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.ELECTRICCOST = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "ELECTRICQTY")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.ELECTRICQTY = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "GASCOST")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.GASCOST = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "GASQTY")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.GASQTY = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "TOTALCOST")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.TOTALCOST = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "TEMPAVG")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.TEMPAVG = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "TEMPHIGH")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.TEMPHIGH = newChild;
}
if(xmlStrEqual(cur->name, (const xmlChar *) "TEMPLOW")) {
Class elementClass = nil;
if(instanceType == NULL) {
elementClass = [NSNumber class];
} else {
NSString *elementTypeString = [NSString stringWithCString:(char*)instanceType encoding:NSUTF8StringEncoding];
NSArray *elementTypeArray = [elementTypeString componentsSeparatedByString:@":"];
NSString *elementClassString = nil;
if([elementTypeArray count] > 1) {
NSString *prefix = [elementTypeArray objectAtIndex:0];
NSString *localName = [elementTypeArray objectAtIndex:1];
xmlNsPtr elementNamespace = xmlSearchNs(cur->doc, cur, [prefix xmlString]);
NSString *standardPrefix = [[USGlobals sharedInstance].wsdlStandardNamespaces objectForKey:[NSString stringWithCString:(char*)elementNamespace->href encoding:NSUTF8StringEncoding]];
elementClassString = [NSString stringWithFormat:@"%@_%@", standardPrefix, localName];
} else {
elementClassString = [elementTypeString stringByReplacingOccurrencesOfString:@":" withString:@"_" options:0 range:NSMakeRange(0, [elementTypeString length])];
}
elementClass = NSClassFromString(elementClassString);
xmlFree(instanceType);
}
id newChild = [elementClass deserializeNode:cur];
self.TEMPLOW = newChild;
}
}
}
}
@end
@implementation PowerBillSearchService
+ (void)initialize
{
[[USGlobals sharedInstance].wsdlStandardNamespaces setObject:@"PowerBillSearchService" forKey:@"urn:DefaultNamespace"];
}
+ (DominoSoapBinding *)DominoSoapBinding
{
}
@end
@implementation DominoSoapBinding
@synthesize address;
@synthesize defaultTimeout;
@synthesize logXMLInOut;
@synthesize cookies;
@synthesize authUsername;
@synthesize authPassword;
- (id)init
{
if((self = [super init])) {
address = nil;
cookies = nil;
defaultTimeout = 10;//seconds
logXMLInOut = NO;
synchronousOperationComplete = NO;
}
return self;
}
- (id)initWithAddress:(NSString *)anAddress
{
if((self = [self init])) {
self.address = [NSURL URLWithString:anAddress];
}
return self;
}
- (void)addCookie:(NSHTTPCookie *)toAdd
{
if(toAdd != nil) {
if(cookies == nil) cookies = [[NSMutableArray alloc] init];
[cookies addObject:toAdd];
}
}
- (DominoSoapBindingResponse *)performSynchronousOperation:(DominoSoapBindingOperation *)operation
{
synchronousOperationComplete = NO;
[operation start];
// Now wait for response
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (!synchronousOperationComplete && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
return operation.response;
}
- (void)performAsynchronousOperation:(DominoSoapBindingOperation *)operation
{
[operation start];
}
- (void) operation:(DominoSoapBindingOperation *)operation completedWithResponse:(DominoSoapBindingResponse *)response
{
synchronousOperationComplete = YES;
}
- (DominoSoapBindingResponse *)GETTOTALCOSTUsingMONTHNUM:(NSNumber *)aMONTHNUM YEARNUM:(NSNumber *)aYEARNUM
{
return [self performSynchronousOperation:[[(DominoSoapBinding_GETTOTALCOST*)[DominoSoapBinding_GETTOTALCOST alloc] initWithBinding:self delegate:self
MONTHNUM:aMONTHNUM
YEARNUM:aYEARNUM
] autorelease]];
}
- (void)GETTOTALCOSTAsyncUsingMONTHNUM:(NSNumber *)aMONTHNUM YEARNUM:(NSNumber *)aYEARNUM delegate:(id<DominoSoapBindingResponseDelegate>)responseDelegate
{
[self performAsynchronousOperation: [[(DominoSoapBinding_GETTOTALCOST*)[DominoSoapBinding_GETTOTALCOST alloc] initWithBinding:self delegate:responseDelegate
MONTHNUM:aMONTHNUM
YEARNUM:aYEARNUM
] autorelease]];
}
- (DominoSoapBindingResponse *)GETPOWERBILLUsingMONTHNUM:(NSNumber *)aMONTHNUM YEARNUM:(NSNumber *)aYEARNUM
{
return [self performSynchronousOperation:[[(DominoSoapBinding_GETPOWERBILL*)[DominoSoapBinding_GETPOWERBILL alloc] initWithBinding:self delegate:self
MONTHNUM:aMONTHNUM
YEARNUM:aYEARNUM
] autorelease]];
}
- (void)GETPOWERBILLAsyncUsingMONTHNUM:(NSNumber *)aMONTHNUM YEARNUM:(NSNumber *)aYEARNUM delegate:(id<DominoSoapBindingResponseDelegate>)responseDelegate
{
[self performAsynchronousOperation: [[(DominoSoapBinding_GETPOWERBILL*)[DominoSoapBinding_GETPOWERBILL alloc] initWithBinding:self delegate:responseDelegate
MONTHNUM:aMONTHNUM
YEARNUM:aYEARNUM
] autorelease]];
}
- (void)sendHTTPCallUsingBody:(NSString *)outputBody soapAction:(NSString *)soapAction forOperation:(DominoSoapBindingOperation *)operation
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:self.address
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:self.defaultTimeout];
NSData *bodyData = [outputBody dataUsingEncoding:NSUTF8StringEncoding];
if(cookies != nil) {
[request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]];
}
[request setValue:@"wsdl2objc" forHTTPHeaderField:@"User-Agent"];
[request setValue:soapAction forHTTPHeaderField:@"SOAPAction"];
[request setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%u", [bodyData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:self.address.host forHTTPHeaderField:@"Host"];
[request setHTTPMethod: @"POST"];
// set version 1.1 - how?
[request setHTTPBody: bodyData];
if(self.logXMLInOut) {
NSLog(@"OutputHeaders:\n%@", [request allHTTPHeaderFields]);
NSLog(@"OutputBody:\n%@", outputBody);
}
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:operation];
operation.urlConnection = connection;
[connection release];
}
- (void) dealloc
{
[address release];
[cookies release];
[super dealloc];
}
@end
@implementation DominoSoapBindingOperation
@synthesize binding;
@synthesize response;
@synthesize delegate;
@synthesize responseData;
@synthesize urlConnection;
- (id)initWithBinding:(DominoSoapBinding *)aBinding delegate:(id<DominoSoapBindingResponseDelegate>)aDelegate
{
if ((self = [super init])) {
self.binding = aBinding;
response = nil;
self.delegate = aDelegate;
self.responseData = nil;
self.urlConnection = nil;
}
return self;
}
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount] == 0) {
NSURLCredential *newCredential;
newCredential=[NSURLCredential credentialWithUser:self.binding.authUsername
password:self.binding.authPassword
persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:newCredential
forAuthenticationChallenge:challenge];
} else {
[[challenge sender] cancelAuthenticationChallenge:challenge];
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"Authentication Error" forKey:NSLocalizedDescriptionKey];
NSError *authError = [NSError errorWithDomain:@"Connection Authentication" code:0 userInfo:userInfo];
[self connection:connection didFailWithError:authError];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)urlResponse
{
NSHTTPURLResponse *httpResponse;
if ([urlResponse isKindOfClass:[NSHTTPURLResponse class]]) {
httpResponse = (NSHTTPURLResponse *) urlResponse;
} else {
httpResponse = nil;
}
if(binding.logXMLInOut) {
NSLog(@"ResponseStatus: %u\n", [httpResponse statusCode]);
NSLog(@"ResponseHeaders:\n%@", [httpResponse allHeaderFields]);
}
NSMutableArray *cookies = [[NSHTTPCookie cookiesWithResponseHeaderFields:[httpResponse allHeaderFields] forURL:binding.address] mutableCopy];
binding.cookies = cookies;
[cookies release];
if ([urlResponse.MIMEType rangeOfString:@"text/xml"].length == 0) {
NSError *error = nil;
[connection cancel];
if ([httpResponse statusCode] >= 400) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSHTTPURLResponse localizedStringForStatusCode:[httpResponse statusCode]] forKey:NSLocalizedDescriptionKey];
error = [NSError errorWithDomain:@"DominoSoapBindingResponseHTTP" code:[httpResponse statusCode] userInfo:userInfo];
} else {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:
[NSString stringWithFormat: @"Unexpected response MIME type to SOAP call:%@", urlResponse.MIMEType]
forKey:NSLocalizedDescriptionKey];
error = [NSError errorWithDomain:@"DominoSoapBindingResponseHTTP" code:1 userInfo:userInfo];
}
[self connection:connection didFailWithError:error];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
if (responseData == nil) {
responseData = [data mutableCopy];
} else {
[responseData appendData:data];
}
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
if (binding.logXMLInOut) {
NSLog(@"ResponseError:\n%@", error);
}
response.error = error;
[delegate operation:self completedWithResponse:response];
}
- (void)dealloc
{
[binding release];
[response release];
delegate = nil;
[responseData release];
[urlConnection release];
[super dealloc];
}
@end
@implementation DominoSoapBinding_GETTOTALCOST
@synthesize MONTHNUM;
@synthesize YEARNUM;
- (id)initWithBinding:(DominoSoapBinding *)aBinding delegate:(id<DominoSoapBindingResponseDelegate>)responseDelegate
MONTHNUM:(NSNumber *)aMONTHNUM
YEARNUM:(NSNumber *)aYEARNUM
{
if((self = [super initWithBinding:aBinding delegate:responseDelegate])) {
self.MONTHNUM = aMONTHNUM;
self.YEARNUM = aYEARNUM;
}
return self;
}
- (void)dealloc
{
if(MONTHNUM != nil) [MONTHNUM release];
if(YEARNUM != nil) [YEARNUM release];
[super dealloc];
}
- (void)main
{
[response autorelease];
response = [DominoSoapBindingResponse new];
DominoSoapBinding_envelope *envelope = [DominoSoapBinding_envelope sharedInstance];
NSMutableDictionary *headerElements = nil;
headerElements = [NSMutableDictionary dictionary];
NSMutableDictionary *bodyElements = nil;
bodyElements = [NSMutableDictionary dictionary];
if(MONTHNUM != nil) [bodyElements setObject:MONTHNUM forKey:@"MONTHNUM"];
if(YEARNUM != nil) [bodyElements setObject:YEARNUM forKey:@"YEARNUM"];
NSString *operationXMLString = [envelope serializedFormUsingHeaderElements:headerElements bodyElements:bodyElements];
[binding sendHTTPCallUsingBody:operationXMLString soapAction:@"GETTOTALCOST" forOperation:self];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (responseData != nil && delegate != nil)
{
xmlDocPtr doc;
xmlNodePtr cur;
if (binding.logXMLInOut) {
NSLog(@"ResponseBody:\n%@", [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]);
}
doc = xmlParseMemory([responseData bytes], [responseData length]);
if (doc == NULL) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"Errors while parsing returned XML" forKey:NSLocalizedDescriptionKey];
response.error = [NSError errorWithDomain:@"DominoSoapBindingResponseXML" code:1 userInfo:userInfo];
[delegate operation:self completedWithResponse:response];
} else {
cur = xmlDocGetRootElement(doc);
cur = cur->children;
for( ; cur != NULL ; cur = cur->next) {
if(cur->type == XML_ELEMENT_NODE) {
if(xmlStrEqual(cur->name, (const xmlChar *) "Body")) {
NSMutableArray *responseBodyParts = [NSMutableArray array];
xmlNodePtr bodyNode;
for(bodyNode=cur->children ; bodyNode != NULL ; bodyNode = bodyNode->next) {
if(cur->type == XML_ELEMENT_NODE) {
if(xmlStrEqual(bodyNode->name, (const xmlChar *) "GETTOTALCOSTReturn")) {
NSNumber *bodyObject = [NSNumber deserializeNode:bodyNode];
//NSAssert1(bodyObject != nil, @"Errors while parsing body %s", bodyNode->name);
if (bodyObject != nil) [responseBodyParts addObject:bodyObject];
}
if (xmlStrEqual(bodyNode->ns->prefix, cur->ns->prefix) &&
xmlStrEqual(bodyNode->name, (const xmlChar *) "Fault")) {
SOAPFault *bodyObject = [SOAPFault deserializeNode:bodyNode];
//NSAssert1(bodyObject != nil, @"Errors while parsing body %s", bodyNode->name);
if (bodyObject != nil) [responseBodyParts addObject:bodyObject];
}
}
}
response.bodyParts = responseBodyParts;
}
}
}
xmlFreeDoc(doc);
}
xmlCleanupParser();
[delegate operation:self completedWithResponse:response];
}
}
@end
@implementation DominoSoapBinding_GETPOWERBILL
@synthesize MONTHNUM;
@synthesize YEARNUM;
- (id)initWithBinding:(DominoSoapBinding *)aBinding delegate:(id<DominoSoapBindingResponseDelegate>)responseDelegate
MONTHNUM:(NSNumber *)aMONTHNUM
YEARNUM:(NSNumber *)aYEARNUM
{
if((self = [super initWithBinding:aBinding delegate:responseDelegate])) {
self.MONTHNUM = aMONTHNUM;
self.YEARNUM = aYEARNUM;
}
return self;
}
- (void)dealloc
{
if(MONTHNUM != nil) [MONTHNUM release];
if(YEARNUM != nil) [YEARNUM release];
[super dealloc];
}
- (void)main
{
[response autorelease];
response = [DominoSoapBindingResponse new];
DominoSoapBinding_envelope *envelope = [DominoSoapBinding_envelope sharedInstance];
NSMutableDictionary *headerElements = nil;
headerElements = [NSMutableDictionary dictionary];
NSMutableDictionary *bodyElements = nil;
bodyElements = [NSMutableDictionary dictionary];
if(MONTHNUM != nil) [bodyElements setObject:MONTHNUM forKey:@"MONTHNUM"];
if(YEARNUM != nil) [bodyElements setObject:YEARNUM forKey:@"YEARNUM"];
NSString *operationXMLString = [envelope serializedFormUsingHeaderElements:headerElements bodyElements:bodyElements];
[binding sendHTTPCallUsingBody:operationXMLString soapAction:@"GETPOWERBILL" forOperation:self];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (responseData != nil && delegate != nil)
{
xmlDocPtr doc;
xmlNodePtr cur;
if (binding.logXMLInOut) {
NSLog(@"ResponseBody:\n%@", [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]);
}
doc = xmlParseMemory([responseData bytes], [responseData length]);
if (doc == NULL) {
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"Errors while parsing returned XML" forKey:NSLocalizedDescriptionKey];
response.error = [NSError errorWithDomain:@"DominoSoapBindingResponseXML" code:1 userInfo:userInfo];
[delegate operation:self completedWithResponse:response];
} else {
cur = xmlDocGetRootElement(doc);
cur = cur->children;
for( ; cur != NULL ; cur = cur->next) {
if(cur->type == XML_ELEMENT_NODE) {
if(xmlStrEqual(cur->name, (const xmlChar *) "Body")) {
NSMutableArray *responseBodyParts = [NSMutableArray array];
xmlNodePtr bodyNode;
for(bodyNode=cur->children ; bodyNode != NULL ; bodyNode = bodyNode->next) {
if(cur->type == XML_ELEMENT_NODE) {
if(xmlStrEqual(bodyNode->name, (const xmlChar *) "GETPOWERBILLReturn")) {
PowerBillSearchService_POWERBILL *bodyObject = [PowerBillSearchService_POWERBILL deserializeNode:bodyNode];
//NSAssert1(bodyObject != nil, @"Errors while parsing body %s", bodyNode->name);
if (bodyObject != nil) [responseBodyParts addObject:bodyObject];
}
if (xmlStrEqual(bodyNode->ns->prefix, cur->ns->prefix) &&
xmlStrEqual(bodyNode->name, (const xmlChar *) "Fault")) {
SOAPFault *bodyObject = [SOAPFault deserializeNode:bodyNode];
//NSAssert1(bodyObject != nil, @"Errors while parsing body %s", bodyNode->name);
if (bodyObject != nil) [responseBodyParts addObject:bodyObject];
}
}
}
response.bodyParts = responseBodyParts;
}
}
}
xmlFreeDoc(doc);
}
xmlCleanupParser();
[delegate operation:self completedWithResponse:response];
}
}
@end
static DominoSoapBinding_envelope *DominoSoapBindingSharedEnvelopeInstance = nil;
@implementation DominoSoapBinding_envelope
+ (DominoSoapBinding_envelope *)sharedInstance
{
if(DominoSoapBindingSharedEnvelopeInstance == nil) {
DominoSoapBindingSharedEnvelopeInstance = [DominoSoapBinding_envelope new];
}
return DominoSoapBindingSharedEnvelopeInstance;
}
- (NSString *)serializedFormUsingHeaderElements:(NSDictionary *)headerElements bodyElements:(NSDictionary *)bodyElements
{
xmlDocPtr doc;
doc = xmlNewDoc((const xmlChar*)XML_DEFAULT_VERSION);
if (doc == NULL) {
NSLog(@"Error creating the xml document tree");
return @"";
}
xmlNodePtr root = xmlNewDocNode(doc, NULL, (const xmlChar*)"Envelope", NULL);
xmlDocSetRootElement(doc, root);
xmlSetNs(root, soapEnvelopeNs);
xmlNewNsProp(root, xslNs, (const xmlChar*)"version", (const xmlChar*)"1.0");
xmlNewNs(root, (const xmlChar*)"urn:DefaultNamespace", (const xmlChar*)"PowerBillSearchService");
if((headerElements != nil) && ([headerElements count] > 0)) {
xmlNodePtr headerNode = xmlNewDocNode(doc, soapEnvelopeNs, (const xmlChar*)"Header", NULL);
xmlAddChild(root, headerNode);
for(NSString *key in [headerElements allKeys]) {
id header = [headerElements objectForKey:key];
xmlAddChild(headerNode, [header xmlNodeForDoc:doc elementName:key elementNSPrefix:nil]);
}
}
if((bodyElements != nil) && ([bodyElements count] > 0)) {
xmlNodePtr bodyNode = xmlNewDocNode(doc, soapEnvelopeNs, (const xmlChar*)"Body", NULL);
xmlAddChild(root, bodyNode);
for(NSString *key in [bodyElements allKeys]) {
id body = [bodyElements objectForKey:key];
xmlAddChild(bodyNode, [body xmlNodeForDoc:doc elementName:key elementNSPrefix:nil]);
}
}
xmlChar *buf;
int size;
xmlDocDumpFormatMemory(doc, &buf, &size, 1);
NSString *serializedForm = [NSString stringWithCString:(const char*)buf encoding:NSUTF8StringEncoding];
xmlFree(buf);
xmlFreeDoc(doc);
return serializedForm;
}
@end
@implementation DominoSoapBindingResponse
@synthesize headers;
@synthesize bodyParts;
@synthesize error;
- (id)init
{
if((self = [super init])) {
headers = nil;
bodyParts = nil;
error = nil;
}
return self;
}
-(void)dealloc {
self.headers = nil;
self.bodyParts = nil;
self.error = nil;
[super dealloc];
}
@end