There is an error in XML document (1,2) , System.InvalidOperationException: <AuthorizationResult xlms:""> was not expected
It appears to be complaining about an unexpected root element and there is some confusion surrounding that elsewhere in your question.
In the question title you have <AuthorizationResult>
In the example XML response you have <AuthenticationResult>
In the C# you have [XmlRoot(ElementName="AuthorizationResult")]
At the end of your question you mention <AuthorizationData>
That's quite a few subtle variations on a theme.
Assuming the XML sample response is correct, you should change the C# to expect the root element to be <AuthenticationResult>
...
[XmlRoot(ElementName="AuthenticationResult")]
public class AuthenticationResult
{
...
hfrog713
I am originally from New Rochelle, NY. I currently live in Syracuse, NY. I am currently working in Quality Assurance. I like play golf, basketball, and soccer.
Updated on May 27, 2020Comments
-
hfrog713 almost 4 years
XML sent from API
<AuthenticationResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <PAPIErrorCode>0</PAPIErrorCode> <ErrorMessage/> <AccessToken>StringAccessToken</AccessToken> <AccessSecret>StringAccessToken</AccessSecret> <PolarisUserID>PolarisSampleUser</PolarisUserID> <BranchID>7</BranchID> <AuthExpDate>2013-05-27T16:57:46.323</AuthExpDate> </AuthenticationResult>
Classes for Response
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; namespace PAPIAutomatedTestingTool { [XmlRoot(ElementName="AuthorizationResult")] public class AuthorizationResult { public int PAPIErrorCode { get; set; } public string ErrorMessage { get; set; } public string AccessToken { get; set; } public string AccessSecret { get; set; } public int PolarisUserID { get; set; } public int BranchID { get; set; } public DateTime AuthExpDate { get; set; } } }
Code making request and deserializing
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Net; using System.Web; using System.Web.Script.Serialization; using System.Security.Cryptography; using System.Xml; using System.Xml.Serialization; namespace PAPIAutomatedTestingTool { public class APICallMethods { public string URI { get; set; } public string accSecret { get; set; } public string accToken { get; set; } public string authorizationString { get; set; } public bool AuthenticateStaffUser() { try { //Initializing all variables string authReqMethod = "POST"; string authAccessKey = "Sample Access Key"; string authAccessKeyID = "Sample Access ID"; string authPatronPassword = ""; DateTime authDateTime = DateTime.Now; string httpAuthDateTime = authDateTime.ToUniversalTime().ToString("r"); string authURI = "Sample URI"; //Composing the papiHash from the given parameters string papiHash = GetPAPIHash(authAccessKey, authReqMethod, authURI, httpAuthDateTime, authPatronPassword); //Formating the authorization string string authorizationString = String.Format("Authorization: PWS {0}:{1}", authAccessKeyID, papiHash); //Creating and defining the WebRequest WebRequest req = WebRequest.Create(authURI); req.Method = "POST"; req.Headers.Add("PolarisDate", httpAuthDateTime); req.Headers.Add(authorizationString); req.ContentType = "application/xml"; string requestBody = "<AuthenticationData><Domain>SampleDomain</Domain><Username>SampleUsername</Username><Password>SamplePassword</Password></AuthenticationData>"; byte[] reqBodyBytes = System.Text.Encoding.UTF8.GetBytes(requestBody); req.ContentLength = reqBodyBytes.Length; using (Stream requestStream = req.GetRequestStream()) { requestStream.Write(reqBodyBytes, 0, reqBodyBytes.Length); } //Receiving the WebResponse using (WebResponse resp = req.GetResponse()) { AuthorizationResult firstResponse = new AuthorizationResult(); Stream respStream = resp.GetResponseStream(); StreamReader sr = new StreamReader(respStream); XmlSerializer xmlSerializer = new XmlSerializer(typeof(AuthorizationResult)); firstResponse = (AuthorizationResult)xmlSerializer.Deserialize(respStream); Console.WriteLine("Authorization: PWS" + firstResponse.AccessSecret + ":" + firstResponse.AccessToken); return true; } } catch (Exception ex) { Console.WriteLine(ex); return false; } } public string GetPAPIHash(string strAccessKey, string strHTTPMethod, string strURI, string strHTTPDate, string strPatronPassword) { byte[] secretBytes = UTF8Encoding.UTF8.GetBytes(strAccessKey); HMACSHA1 hmac = new HMACSHA1(secretBytes); byte[] dataBytes = null; if (strPatronPassword.Length > 0) { dataBytes = UTF8Encoding.UTF8.GetBytes(strHTTPMethod + strURI + strHTTPDate + strPatronPassword); } else { dataBytes = UTF8Encoding.UTF8.GetBytes(strHTTPMethod + strURI + strHTTPDate); } byte[] computedHash = hmac.ComputeHash(dataBytes); string computedHashString = Convert.ToBase64String(computedHash); return computedHashString; } } }
I am making a POST request to the API with a body that contains AuthorizationData. The API is supposed to return the xml to deserialize into firstresponse. I have received the xml(confirmed by printing to console) but i am receiving the
There is an error in the XML Document(1,2)
and<AuthorizationData xmlns="">
was not expected. Thanks for the help in advance. -
inthevortex over 6 yearsI have been facing the same issue, same error. My XmlRoot is correctly named and still it gets stuck and says it cant identify xmlns="..." part. Can anyone help?
-
inthevortex over 6 yearsthe exact same error message was coming, I have solved it by adding attribute that defines its namespace and its working now. Thanks