XML Soap запрос к crm по требованию от цели c - PullRequest
0 голосов
/ 01 февраля 2011

Я отправляю запрос мыла xml для входа в систему на моем сайте crm ondemand, но я получаю сообщение об ошибке "http-запрос не содержит правильно сформированный xml. Попытка его анализа вызвала следующую ошибку XML-20108 (Fatal Error) отсутствует корневой элемент ". я не знаю, что делать: S ... я потратил впустую 2 дня и не смог добиться никакого прогресса .. пожалуйста, помогите мне в этом! :( .. что-то не так в запросе на мыло.

NSString *post = [NSString stringWithFormat:          
 @"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \
< soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/ \"              xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:enc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:ns9060=\"http://tempuri.org\"> \
< soap:Header> \
< wsse:Security soap:mustUnderstand=\"1\"> \
< wsse:UsernameToken> \
< wsse:Username>MyUserName</wsse:Username> \
< wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">MyPassword</wsse:Password> \
< /wsse:UsernameToken> \
< /wsse:Security> \
< /soap:Header> \
< soap:Body> \
< AccountQueryPage_Input xmlns=\"urn:crmondemand/ws/ecbs/account/10/2004\"> \
< ListOfAccount xmlns=\"urn:/crmondemand/xml/Account/Query\"> \
< Account> \
   < AccountName/> \
< /Account> \
< /ListOfAccount> \
< /AccountQueryPage_Input> \
< /soap:Body> \
< /soap:Envelope>"];

 NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];  
 NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];  

    NSURL *url = [NSURL URLWithString:@"https://secure-ausomxdsa.crmondemand.com/Services/Integration"];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];

  [theRequest setHTTPMethod:@"POST"];
  [theRequest setValue:@"document/urn:crmondemand/ws/ecbs/account/10/2004:AccountQueryPage" forHTTPHeaderField:@"SOAPAction"];
  [theRequest setValue:@"application/soap+xml;charset=ISO-8859-1" forHTTPHeaderField:@"Current-Type"];
  [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
  [theRequest setHTTPBody:postData];      


      NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if(theConnection)
    {
        status.text = @"Connection";
        webData = [[NSMutableData data] retain];
    }
    else
    {

    }

    }

    - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
     {
         status.text = @"didReceiveResponse";
         [webData setLength: 0];
     }
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
     {

          status.text = @"didReceiveData";
          [webData appendData:data];
   }
    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
   {
        status.text = @"didFailWithError";        
        [connection release];
       [webData release];
   }
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    {

         NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
         status.text = nil;
         status.text = loginStatus;
         [loginStatus release];

         [connection release];
         [webData release];
   } 

  @end

1 Ответ

3 голосов
/ 01 февраля 2011

Похоже, что есть две проблемы с запросом на мыло.

Во-первых, теги элемента имеют пробел после <.
Например, < soap:Envelope должно быть <soap:Envelope.
Удалите начальный пробел во всех начальных и конечных тегах.

Во-вторых, URI для xmlns:soap имеет пробел перед закрывающей кавычкой:

xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/ \"
                                                      ^trailing space

Перед закрывающей кавычкой не должно быть завершающего пробела.

Вы можете проверить свой XML, используя что-то вроде http://www.w3schools.com/xml/xml_validator.asp.

Это не гарантирует, что запрос будет работать после этих исправлений, но исключит недействительный xml и, надеюсь, позволит вам двигаться дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...