Моя попытка состоит в том, чтобы создать несколько мыльных сообщений из следующего содержимого SOAPBody [только образец, а не фактический]. Будут отдельные запросы для каждого EmpId.
<Request>
<EMPId>?</EMPId>
</Request>
Я использую следующий код для преобразования указанной строки запроса в объект документа.
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes())));
Когда у меня есть документ, я могу создать SOAPBody, заменив значения EMPId.
Теперь мне нужно создать отдельные SOAPMessages для каждого созданного SOAPBody.
Для этого я использую следующий код.
private static String cretaeSOAPMessage(Document soapBodyDoc, String serverURI, String soapAction){
String soapMsg = null;
try {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("v1",serverURI);
SOAPBody soapBody = envelope.getBody();
soapBodyDoc.setPrefix("v1");
soapBody.addDocument(soapBodyDoc);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI + soapAction);
soapMessage.saveChanges();
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
soapMessage.writeTo(out);
} catch (IOException e) {
e.printStackTrace();
}
soapMsg = new String(out.toByteArray());
} catch (SOAPException e) {
e.printStackTrace();
}
return soapMsg;
}
Но я получаю следующую ошибку при выполнении строки с содержимым " soapBodyDoc.setPrefix(" v1 "); '
Исключение в потоке "main" org.w3c.dom.DOMException: NAMESPACE_ERR: делается попытка создать или изменить объект таким образом, который неверен в отношении пространств имен.
Я попытался добавить префикс пространства имен, где я создаю SOAPBody, даже этот отработанный dint. Как я могу избежать этой ошибки и добавить префикс пространства имен в SOAPBody?
Он решил. Декларация пространства имен удаляется из конверта и добавляется в тело.
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody soapBody = envelope.getBody();
soapBody.addDocument(soapBodyDoc);
**soapBody.addNamespaceDeclaration("", serverURI);**
Префикс удаляется, поскольку у оригинала нет префикса.