SOAP + XML - Ответ в HttpURLConnection - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь получить мыльный ответ от URL,

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:int="http://service.com/integration/">
   <soap:Header>
      <int:Options>
         <int:UpdateLastModified>true</int:UpdateLastModified>
      </int:Options>
   </soap:Header>
   <soap:Body>
      <int:Execute>
         <int:commandRequest xsi:type="int:TaskCreateCommand" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <int:TaskOrder>
               <int:TypeCategory>Request</int:TypeCategory>
               <int:Customer>
                  <int:Id>83</int:Id>
               </int:Customer>
               <int:Items>
                  <int:WoItem>
                     <int:Task>
                        <int:Id>16519</int:Id>
                     </int:Task>
                     <int:Comment>New Task 1</int:Comment>
                  </int:WoItem>
               </int:Items>
            </int:TaskOrder>
         </int:commandRequest>
      </int:Execute>
   </soap:Body>
</soap:Envelope>

Код, который я пробовал:

String url = "http://url.com/wsdk/thatService.asmx";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type","application/soap+xml");
String xml = ""; //input that above xml 
con.setDoOutput(true);
System.out.println(xml);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(xml);
wr.flush();
wr.close();
String responseStatus = con.getResponseMessage();
System.out.println(responseStatus);

OP:

Internal Server Error
java.io.IOException: Server returned HTTP response code: 500 for URL:

Но если язапустите это в POSTMAN, тогда он даст точный OP:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <ExecuteResponse xmlns="http://service.com/integration/">
            <ExecuteResult xsi:type="TaskResponse">
                <Task>
                    <Id>12367</Id>
                    <ConcurrencyId>1</ConcurrencyId>
                    <Number>KLMNOU</Number>
                    <TypeCategory>Request</TypeCategory>
                </Task>
            </ExecuteResult>
        </ExecuteResponse>
    </soap:Body>
</soap:Envelope>

где я делаю ошибку?Тот же ввод работает нормально в POSTMAN, но не работает с использованием кода!

Я указал Content-type: application / soap + xml с обеих сторон.Все еще не работает.Мне интересно, что делает эту проблему?

1 Ответ

0 голосов
/ 26 марта 2019

Здесь много потенциальных проблем, но я подозреваю, что проблема в том, что вы используете DataOutputStream.writeBytes(String), который согласно документации говорит следующее:

Записывает строку вбазовый выходной поток в виде последовательности байтов.Каждый символ в строке записывается последовательно, отбрасывая его старшие восемь битов.

Готов поспорить, что сервер не понимает, какой набор символов (если он есть) выглядит на ваших данныхвсе кончено.Попробуйте OutputStreamWriter.write(String) вместо:

OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(xml);
...