Запрос на вставку данных Soap api не работает в Java

#java #xml #api #soap

#java #xml #API #soap

Вопрос:

Я должен использовать SOAP api для небольшого проекта. Теперь я могу получить данные, но при попытке вставить данные, похоже, это не сработает и выдает следующую ошибку: серверу не удалось обработать запрос. —> Ссылка на объект не установлена для экземпляра объекта.

Я использую следующий ресурс soap для post-запроса: http://webapp.tcscourier.com/codapi/Service1.asmx?op=InsertData

У меня есть следующий код:

  OkHttpClient client = new OkHttpClient();
    MediaType mediaType = MediaType.parse("text/xml");
    RequestBody body = RequestBody.create(mediaType, "<?xml version="1.0" encoding="utf-8"?>rn<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">rn  <soap12:Body>rn    <InsertData xmlns="http://202.61.51.93:6265/">rn      <userName>string</userName>rn      <password>string</password>rn      <costCenterCode>string</costCenterCode>rn      <consigneeName>string</consigneeName>rn      <consigneeAddress>string</consigneeAddress>rn      <consigneeMobNo>string</consigneeMobNo>rn      <consigneeEmail>string</consigneeEmail>rn      <originCityName>string</originCityName>rn      <destinationCityName>string</destinationCityName>rn      <pieces>string</pieces>rn      <weight>string</weight>rn      <codAmount>0.2</codAmount>rn      <custRefNo>string</custRefNo>rn      <productDetails>string</productDetails>rn      <fragile>string</fragile>rn      <services>string</services>rn      <remarks>string</remarks>rn      <insuranceValue>string</insuranceValue>rn    </InsertData>rn  </soap12:Body>rn</soap12:Envelope>");
    Request request = new Request.Builder()
            .url("http://webapp.tcscourier.com/codapi/Service1.asmx?op=InsertData")
            .method("POST", body)
            .addHeader("Content-Type", "text/xml")
            .build();
    try {
        Response response = client.newCall(request).execute();

        JSONObject xmlJSONObj = XML.toJSONObject(response.body().string());
        System.out.println(xmlJSONObj.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
  

Чего мне не хватает?

Ответ №1:

Пожалуйста, попробуйте добавить заголовок SOAPAction в запрос.

AddHeader(«soapaction», «http://202.61.51.93:6265/InsertData «)

Комментарии:

1. Должно быть какое-то внутреннее требование, которое мы не можем знать, не зная его. Я пробовал это с другим веб-сервисом, и это работает. Я предлагаю всем, кто ищет разъяснения по SOAP, заглянуть в Postman, а затем перейти на Java. Ценным ресурсом для меня была следующая ссылка: youtube.com/watch?v=xC4QQCQDDDk