Inserción de token de nombre de usuario en la cabecera de seguridad del sobre SOAP generado ya me da dos cabeceras!

StackOverflow https://stackoverflow.com/questions/1724598

Pregunta

Estoy usando WSS4J añadir una ficha nombre de usuario en la cabecera de una petición SOAP sobre ya formado.

Esto es lo que la solicitud SOAP se ve así:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://sample03.samples.rampart.apache.org/xsd">   
   <soapenv:Header/>   
   <soapenv:Body>      
      <xsd:echo>         
         <xsd:param0>hurro kitty</xsd:param0>      
      </xsd:echo>   
   </soapenv:Body></soapenv:Envelope>

Este es mi código (la cadena, solicitud, es la solicitud anterior):

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(request));
Document document = builder.parse(inStream);

WSSecUsernameToken usernametoken = new WSSecUsernameToken();
usernametoken.setPasswordType(WSConstants.PASSWORD_TEXT);
usernametoken.setUserInfo(username, password);

WSSecHeader secHeader = new WSSecHeader("", false);
secHeader.insertSecurityHeader(document);
usernametoken.build(document, secHeader);

Este es mi resultado (nótese la cabecera que se insertó no está correctamente espacio de nombres, así como hay dos cabeceras):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://sample03.samples.rampart.apache.org/xsd">   
   <Header>      
      <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">         
         <wsse:UsernameToken wsu:Id="UsernameToken-2765109" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">            
            <wsse:Username>bob</wsse:Username>            
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobPW</wsse:Password>         
         </wsse:UsernameToken>      
      </wsse:Security>   
   </Header>   
   <soapenv:Header/>   
   <soapenv:Body>      
      <xsd:echo>         
         <xsd:param0>hurro kitty</xsd:param0>      
      </xsd:echo>   
   </soapenv:Body></soapenv:Envelope>

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

  

¿Qué estoy haciendo mal?

Cuando usted está construyendo el XML inicial, es necesario asegurarse de que el espacio de nombres DocumentBuilderFactory es consciente. WSSecurity está tratando de encontrar el encabezado de jabón por el espacio de nombres de jabón, pero no está disponible. Agregando la siguiente línea debe fijarlo:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top