Измените строку soap xml перед отправкой httpurlconnection — JAVA

#java #xml #soap

#java #xml #soap

Вопрос:

У меня есть файл soap xml, который используется для отправки в теле HttpURLConnection. Мне нужно отредактировать некоторое значение перед отправкой сообщения, как показано ниже

sopaXML.xml :

 <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>
  

Необходимо изменить значение :

 <int:TaskOrder>
        <int:TypeCategory>Request</int:TypeCategory>
                   <int:Customer>
                      <int:Id>102</int:Id>
                   </int:Customer>
                   <int:Items>
                      <int:WoItem>
                         <int:Task>
                            <int:Id>20034</int:Id>
                         </int:Task>
                         <int:Comment>Modified New Task Here!</int:Comment>
                      </int:WoItem>
                 </int:Items>
      </int:TaskOrder>
  

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

 String url = "http://url/wsdk/Service.asmx";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type","application/soap xml");
con.setRequestProperty("Cookie", "SessionId=0t10; path=/; HttpOnly");
con.setDoOutput(true)
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
XML xml = new XMLDocument(new File("src/main/resources/soapXML.xml"));
String xmlString = xml.toString(); 
System.out.println(xmlString);
InputStream stream = new ByteArrayInputStream(xmlString.getBytes());
SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(null, stream);
// How to modify the values
String modifiedxmlString = // modidfied soapXML string
wr.writeBytes(modifiedxmlString);
wr.flush();
wr.close();
String responseStatus = con.getResponseMessage();
  

Как изменить существующее значение из строки soap xml и опубликовать эту измененную строку в HttpURLConnection?

Ответ №1:

попробуйте приведенный ниже код.

Примечание: Это подсказка, а не скомпилированный код

У вас есть SOAPMessage объект, с помощью которого вы можете получить тело soap

 SOAPMessage sm = ----- 
SOAPBody body = sm.getSOAPBody();

private void updateNodeValue(List<String> nodeNamesWhichYouWantToUpdate, SOAPBody body) {
        for(String nodeName : nodeNamesWhichYouWantToUpdate){
            NodeList nodeList = body.getElementsByTagName(nodeName);
            int length = nodeList.getLength();
            for (int i = 0; i < length; i  ) {
               Node  node = (Node) nodeList.item(i);    
               node.setTextContent("updateNodeValue");
            }
        }

    }
  

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

1. Если я передам List<String> nodenamesкоторый вы хотите использовать= Arrays.asList(«Customer», «WoItem»); тогда это даст NodeList 0

2. Окончательно изменен на List<String> nodenamesкоторый вы хотите использовать= Arrays.asList(«int:Customer», «int:WoItem»); теперь введен в node.setTextContent(«updateNodeValue»); но значение не обновляется.