2012-02-03 2 views
0

JBoss 6.1.0에 배포 된 응용 프로그램에서 아웃 바운드 ws 클라이언트 SOAP 메시지에 대한 SOAP 본문을 수정하려고합니다. 결정적인. 다음 코드가 그 목적을 위해 등록의 HandlerResolver,있다 :이 라인JBoss 6에서 SOAP 본문을 수정하는 방법

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] 

: 그러나

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

는,이 예외를 throw

firstChild.appendChild(signatureElement); 

이 코드 JBoss 5.1.0에서 잘 작동합니다.

아이디어가 있으십니까? 감사합니다. .

답변

0

축 (JBoss 5.1에서 사용)과 Cxf (JBoss 6.1.0에서 기본으로 사용)와의 차이점은이 문제를 만듭니다. 이것이 바로이 코드가 JBoss 5.1.0에서 제대로 작동 한 이유입니다.

여기는 solution입니다.

관련 문제