Ошибка, связанная с пространством имен при создании запроса SOAP

1

Моя попытка состоит в том, чтобы создать несколько мыльных сообщений из следующего содержимого 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?

Теги:
dom
web-services
xml-namespaces

1 ответ

0

Он решил. Декларация пространства имен удаляется из конверта и добавляется в тело.

   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);**

Префикс удаляется, поскольку у оригинала нет префикса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню