2016-12-22 1 views
2

클라이언트 측 SOAPHandler를 작성하여 서버 &으로 나가는 요청을 로깅하려면 JAX-WS를 사용하여 일부 요소를 수정하십시오.SOAPHandler의 saveChanges 이후 SOAP 메시지가 변경됨

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="xmldsig-4cf24b6d-5c1a-4756-9657-3ba87c3af164"> 
<ds:SignedInfo> 
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 

I :이 인쇄 된 메시지의 일부이다

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    msg.writeTo(baos); 
    System.out.println(baos.toString(getMessageEncoding(msg))); 

:

try { 
    // modifying elements 
    SOAPBody body = soapMsg.getSOAPBody(); 
    NodeList blst = body.getElementsByTagName("ns6:exportNsiItemRequest"); 
    Node itm = blst.item(0); 
    Node itm2 = itm.getFirstChild(); 

    Document doc = body.getOwnerDocument(); 

    doc.adoptNode(nd); 

    itm.insertBefore(nd, itm2); 

    soapMsg.saveChanges(); 
    log.info("XML saved!"); 
} catch (SOAPException e1) { 
    log.info("XML DOESN'T saved!"); 
    e1.printStackTrace(); 
} 

다음 I 메시지를 인쇄 : I 요소를 변형 한 후

는 I 메시지를 저장할 서버로가는 실제 비누 메시지의 컨텍스트를 보려면 Wireshark를 사용하십시오.

그리고 내가 보는 무엇입니까 ?? 그것은 :

 <ds:Signature 
      xmlns="" 
      Id="xmldsig-4cf24b6d-5c1a-4756-9657-3ba87c3af164" 
      xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:SignedInfo> 
       <ds:CanonicalizationMethod 
        Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 

내 메시지를 수정하고 xlnms = ""태그를 삽입하는 이유는 무엇입니까?

+0

답변을 찾았습니까? 나는 여기에 같은 문제가있다 ... –

+0

아니, 아직 못 찾았 어. 찾았 으면 나와 공유하십시오 – Lev

+0

질문에 관련된 모든 코드를 추가 할 수 있습니까? (메시지를 수정하는 방법과 메시지를 서버로 보내는 방법). 이것은 당신을 도울 수있는 더 나은 상황을 줄 것입니다. 나는 당신이 SOAP 요청을 보낼 때 SOAPSender 나 이름이 무엇이든 자동으로 빈'xmlns' 태그를 추가 할 것이라고 생각합니다. 원래의 메시지는 그것을 포함하지 않기 때문에 필요할 수 있습니다. – DarkCygnus

답변

3

삽입 된 태그는 XML Namespaces과 관련됩니다. 그것들은 1999 년 월드 와이드 웹 컨소시엄 (World Wide Web Consortium)에 의해 정의되었습니다 (문서 here 및 최신 version). 이러한 문서에서 언급 한 바와 같이

XML 네임 스페이스는 Extensible Markup Language 문서에서 사용되는 요소 및 특성 이름을 URI 참조로 식별되는 네임 스페이스와 연결하여 간단히 정의 할 수있는 간단한 방법을 제공합니다. 나는 그 내용에서 추출의 xmlns 태그에 대해 이야기 this 참조를 발견 몇 가지 조사를하는

:

접두사 xmlns: 네임 스페이스를 선언하기위한 구문 장치로 지정 되었으나, 자체와 연관되지 않았다 1999 년 1 월 네임 스페이스 사양에 의한 모든 네임 스페이스 이름 ...

은 네임 스페이스를 선언 할 때 예약 된 접두어 xmlns:을 사용해야 함을 유의하십시오.

기본 네임 스페이스를 선언하는 데 사용되는 속성 이름 xmlns은, 또한 이에 내가 코멘트에서 언급 한 바와 같이

, 나는 더 많은 코드가 생각 ...이 네임 스페이스 이름과 연관된 우리는이 문제가 당신에게 왜 일어나는지에 대해 더 많은 것을 밝힐 것입니다. 그러나 참조에서 볼 수 있듯이 빈 xmlns 태그가 필수 기본값으로 추가되고 있습니다. 즉, 해당 태그에 대한 기본 네임 스페이스 접두사가 없습니다. 문서의 URI).같은 여기

xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 

네임 스페이스 접두사 (:

더 그것을 설명하려면, (제대로 참조 상태로 xmlns: 접두사를 사용하는 경우) 당신이 문서에 선언 된 다른 네임 스페이스를 볼 수 있습니다 별칭)은 ds이고 네임 스페이스 URI는http://www.w3.org/2000/09/xmldsig#입니다. 즉, 문서에서 <ds:foo />과 같은 요소는 문서 구문 분석시 식별자가 <http://www.w3.org/2000/09/xmldsig#:foo /> 인 것과 같습니다.

자세한 내용을 보려면 this 멋진 질문과 대답을 참조하고 네임 스페이스에 대해 자세히 설명하고 유용한 외부 참조를 제공하십시오.

관련 문제