#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»); но значение не обновляется.