Необходимо отправить POST запросом XML файл. При получении ответа получаю ошибку java.Lang.NullPointerException. Сначала в XML файле содержались ошибки, сейчас ошибки поправили. Файл должен быть в кодировке windows-1251 и содержать шапку. Совместно с тех.поддержкой выяснили, что запрос приходит пустой. Подскажите пожалуйста, что надо сделать чтобы запрос пришел не пустой?
Вот код моей программы:
namespace ConsoleApp3
{
class Program
{
public static byte[] ReadFully(Stream input)
{
using (MemoryStream rms = new MemoryStream())
{
input.CopyTo(rms);
return rms.ToArray();
}
}
static void Main(string[] args)
{
XDocument xdoc = new XDocument(
new XDeclaration("1.0", "Windows-1251","yes"),
new XElement("product",
new XElement ("prequest",
new XElement("req",
new XElement("AddressReq",
new XElement("houseNumber", "1"),
new XElement ("street","Го"),
new XElement("apartment", "38"),
new XElement("city", "Магадан"),
new XElement("postal", "685"),
new XElement("addressType", "1")),
new XElement("AddressReq",
new XElement("houseNumber", "1"),
new XElement("street", "Го"),
new XElement("apartment", "38"),
new XElement("city", "Магадан"),
new XElement("postal", "685"),
new XElement("addressType", "1")),
new XElement("IdReq",
new XElement("idNum", "273"),
new XElement("idType","21"),
new XElement("seriesNumber", "64"),
new XElement("issueCountry", "г. Магадан"),
new XElement("issueDate", "2006-03-18"),
new XElement("issueAuthority", "ОВД")
),
new XElement("IdReq",
new XElement("idNum", "12345678901"),
new XElement("idType", "32")
),
new XElement("InquiryReq",
new XElement("ConsentReq",
new XElement("consentFlag", "Y"),
new XElement("consentDate", "2016-01-20"),
new XElement("consentExpireDate", "2021-10-21"),
new XElement("consentPurpose", "4"),
new XElement("otherConsentPurpose", "Job pre-screening"),
new XElement("reportUser", "DG Human Resources Incorporated"),
new XElement("liability", "Y")
),
new XElement("inqPurpose", "01"),
new XElement("inqAmount", "10000"),
new XElement("currencyCode", "usd")
),
new XElement("PersonReq",
new XElement("name1", "К"),
new XElement("first", "Г"),
new XElement("paternal", "Г"),
new XElement("gender", "1"),
new XElement("birthDt", "1946-07-06"),
new XElement("placeOfBirth", "Москва")
),
new XElement("RequestorReq",
new XElement("MemberCode", "code"),
new XElement("UserID", "user"),
new XElement("Password", "pass")
),
new XElement("RefReq",
new XElement("product", "CHST")
),
new XElement("IOType","B2B"),
new XElement("OutputFormat", "xml"),
new XElement("lang", "ru")
))
));
MemoryStream stream = new MemoryStream();
xdoc.Save(stream);
WebRequest request = WebRequest.Create("MyUrl");
var byteArray = ReadFully(stream);
request.Method = "POST";
request.ContentType = "text/xml";
request.ContentLength = byteArray.Length;
Stream data = request.GetRequestStream();
data.Write(byteArray, 0, byteArray.Length);
data.Close();
Console.WriteLine("Нажмите клавишу чтобы получить ответ");
Console.ReadKey();
WebResponse response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
data = response.GetResponseStream();
StreamReader reader = new StreamReader(data);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
data.Close();
response.Close();
Console.ReadKey();
}
}
}
Вы и так записали в стрим вот здесь данные
xdoc.Save(stream);
Но, как я понял, вы не двигаете записанный стрим в начало перед чтением
xdoc.Save(stream);
stream.Position = 0;
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости