Как изменить тело SOAP в JBoss 6 - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь изменить тело SOAP для исходящего сообщения SOAP клиента ws из приложения, которое развернуто на JBoss 6.1.0. Финал. Для этого существует зарегистрированный HandlerResolver, который имеет следующий код:

public boolean handleMessage(SOAPMessageContext messagecontext) {
        Boolean outbound = (Boolean) messagecontext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        if (outbound) {
            try {
                SOAPMessage soapMessage = messagecontext.getMessage();
                SOAPBody soapBody = soapMessage.getSOAPBody();

                Node firstChild = soapBody.getFirstChild();

                String timeStamp = getTimestamp();
                String signature = getSignature(firstChild.getLocalName(), timeStamp, secretBytes);

                SOAPFactory factory = SOAPFactory.newInstance();
                SOAPElement signatureElement = factory.createElement("Signature");
                System.out.println(signature);
                signatureElement.addTextNode(signature);

                SOAPElement timestampElement = factory.createElement("Timestamp");
                timestampElement.addTextNode(timeStamp);

                firstChild.appendChild(signatureElement);
                firstChild.appendChild(timestampElement);                   

            } catch(SOAPException se) {
                throw new RuntimeException("SOAPException was thrown.", se);
            }
        }
        return true;
    }

Однако, он выдает это исключение:

17:59:35,527 WARN  [org.apache.cxf.jaxws.handler.HandlerChainInvoker] HANDLER_RAISED_RUNTIME_EXCEPTION: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(Unknown Source) [:1.6.0_27]
at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(Unknown Source) [:1.6.0_27]
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(Unknown Source) [:1.6.0_27]

для этой строки:

firstChild.appendChild(signatureElement);

Этот код отлично работал с JBoss 5.1.0.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2012

Разница между платформами Axis (используется в JBoss 5.1) и Cxf (используется в JBoss 6.1.0 по умолчанию) создает эту проблему. Вот почему этот код хорошо работал с JBoss 5.1.0.

Вот решение .

...