2016-12-14 8 views
0

축 1.4 웹 서비스 클라이언트가 있습니다. 비누 메시지 헤더에 사용자 이름과 암호를 추가해야합니다. 나는 그것을했지만, 나는 또한 바람직하지 않은 속성들을 생성한다.축 1.4 비누 머리글 추가 사용자 이름 및 암호

<soapenv:Header> 
<wsse:Security 
    soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
    soapenv:mustUnderstand="0" 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <wsse:UsernameToken 
     soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
     soapenv:mustUnderstand="0" 
     xmlns:wsse=""> 
      <wsse:Username 
       soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
       soapenv:mustUnderstand="0" 
       xmlns:wsse="">testuser</wsse:Username> 
      <wsse:Password 
       soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
       soapenv:mustUnderstand="0" 
       xmlns:wsse="">testpass</wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 

:

<soapenv:Header> 
<wsse:Security 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">   
    <wsse:UsernameToken> 
     <wsse:Username>testuser</wsse:Username> 
     <wsse:Password>testpass</wsse:Password> 
    </wsse:UsernameToken> 
</wsse:Security> 

이 생성 된 헤더 인이 내가 생성 할 SOAP 헤더가

SOAPHeaderElement sec = new SOAPHeaderElement(
      "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", 
      "wsse:Security"); 

    SOAPHeaderElement token = new SOAPHeaderElement("", 
      "wsse:UsernameToken"); 
    SOAPHeaderElement username = new SOAPHeaderElement("", "wsse:Username"); 
    SOAPHeaderElement password = new SOAPHeaderElement("", "wsse:Password"); 
    username.addTextNode("testuser"); 
    password.addTextNode("testpass"); 

    token.addChildElement(username); 
    token.addChildElement(password); 
    sec.addChildElement(token); 

입니다 :

내 코드입니다

다른 네임 스페이스 및 특성은 문제가 없지만 비어 있습니다. xmlns : wsse = "" 특성으로 인해 클라이언트가 웹 서비스에서 오류를 발생시킵니다. 비누 -ui에서이 빈 특성을 throw 할 때 성공적인 응답을 얻습니다. 자바 코드에서 웹 서비스에서 구문 분석 오류가 발생합니다.

이러한 속성이없는 헤더를 생성 할 수 없습니다. 헤더 요소에 "wsse"접두어를 추가하면이 요소에 xmlns : wsse = "" 속성도 추가됩니다. wsse 프리픽스가 없으면 웹 서비스에서 오류가 발생합니다.

wsse 접두사가있는 헤더를 xmlns : wsse = "" 축없이 생성하는 방법은 무엇입니까? 네임 스페이스 URI에 대한에 빈 문자열을 전달하기보다는

+0

시도가'= 토큰 새로운 SOAPHeaderElement에를 SOAPHeaderElement에 (NULL, "WSSE : UsernameToken이") ; – Shloim

+0

@ Shloim - 모호한 메소드 호출 오류가 발생하지 않습니까? 그것은 두 생성자의 서명과 일치합니다. – rmlan

+0

그래서 cast :'(String) null' – Shloim

답변

0

, 단순히 보안 태그하고있는 같은 일을 수행

String namespaceUri = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
SOAPHeaderElement sec = new SOAPHeaderElement(namespaceUri, "wsse:Security"); 
SOAPHeaderElement token = new SOAPHeaderElement(namespaceUri, "wsse:UsernameToken"); 
SOAPHeaderElement username = new SOAPHeaderElement(namespaceUri, "wsse:Username"); 
SOAPHeaderElement password = new SOAPHeaderElement(namespaceUri, "wsse:Password");