2013-04-22 5 views
0

Я новичок и пишу веб-службу SOAP (для интеграции), чтобы выполнить вызов SOAP, мне нужно сначала аутентифицировать пользователя (пользователь стандартной интеграции).Базовая аутентификация HTTP от Salesforce до Taleo

Ниже приведен фрагмент кода. Однако, когда я выполняю выноску, он выдает код ошибки 500 для запроса базовой Http и код ошибки 401 для второго запроса Http.

Правильно ли это?

HTTP auth = new HTTP(); 
HTTPRequest r = new HTTPRequest(); 
r.setEndpoint('https://domainname.net/enterprise/soap?ServiceName=IntegrationManagementService'); 
Blob headerValue = Blob.valueOf(username+':'+password); 
String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue); 
r.setHeader('Authorization', authorizationHeader); 
r.setMethod('POST'); 

try 
{ 
HTTPResponse authresp = auth.send(r); 
if(authresp.getStatusCode() == 200) 
     { 
      system.debug('Authentication success!!!' + authresp); 
     } 
     else 
     {system.debug('Authentication failed!!!' + authresp + authresp.getStatusCode());}  
     }catch(exception e){} 

    //construct http request 
    string endpointURL = 'https://doaminname.net/enterprise/soap?ServiceName=IntegrationManagementService'; 
    HttpRequest req = new HttpRequest(); 
    req.setMethod('POST'); 

    req.setEndpoint(endpointURL); 
    req.setHeader('Content-Type','application/xml'); 
    req.setBody(TaleoXML); 

    //send http request 
    Http http = new Http(); 
    try 
    { 
     HttpResponse res = http.send(req); 

     //check the response 
     if(res.getStatusCode() == 200) 
     { 
      system.debug('Callout success!!!' + res); 
     } 
     else 
     {system.debug('Callout failed!!!' + res + res.getStatusCode());}  
    }catch(exception e){} 

ответ

0

Я не знаком с библиотекой, которую вы используете, но я могу предложить несколько возможностей для исследования:

  • Базовая аутентификация без гражданства метод. Вы не авторизованы и не вошли в систему. Это означает, что нет отдельного первоначального запроса на аутентификацию (как следует из вашего кода); вы включаете заголовок Authorization с каждым запросом. Вот почему вы получаете 401 по второму запросу.

  • По первому запросу вы предоставляете учетные данные, и сервер сталкивается с непредвиденной внутренней ошибкой (это то, что означает 500). Если он содержит тело с ответом об ошибке, он может иметь больше информации. Я бы предположил, что это имеет какое-то отношение к тому факту, что вы не предоставили тело своим POST, и сервер не ожидал этого.

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

0

Во втором запросе вы не включаете аутентификацию, поэтому вы получаете ошибку 401 (неавторизованный).

В первом запросе кажется, что вы аутентифицировали ok, но сервер не смог обработать запрос. Я думаю, вы пропустили ссылку на функцию/операцию веб-службы IntegrationManagementService, которую вы хотите использовать. Или вы используете функцию/операцию, для которой требуется MTOM.