2010-12-06 77 views
6

estoy usando la herramienta SOAPUI acceder a los servicios web JAX-WS desplegados en Weblogic 10.3.2Cómo resolver el error de la invocación del servicio web JAX_WS "No se entienden los encabezados de MustUnderstand"?

Solicitud:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.pc3.polk.com/"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp wsu:Id="Timestamp-1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2010-12-03T21:10:43Z</wsu:Created> <wsu:Expires>2010-12-03T21:44:03Z</wsu:Expires> </wsu:Timestamp> <wsu:Timestamp wsu:Id="Timestamp-60" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2010-12-03T20:10:39Z</wsu:Created> <wsu:Expires>2010-12-03T20:43:59Z</wsu:Expires> </wsu:Timestamp> <wsse:UsernameToken wsu:Id="UsernameToken-59" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Username>rwerqre</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">ewrqwrwerqer</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">Nmw0ksmiOX+hkiSoWb2Rjg==</wsse:Nonce> <wsu:Created>2010-12-03T20:10:39.649Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ws:getMetadata/> </soapenv:Body> </soapenv:Envelope>

Respuesta:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
     <faultcode>SOAP-ENV:MustUnderstand</faultcode> 
     <faultstring>MustUnderstand headers:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood</faultstring> 
     </SOAP-ENV:Fault> 
    </S:Body> 
</S:Envelope> 

Respuesta

7

Puede configurar un maniquí SOAPHandler para {http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security que marcaría este encabezado como 'entendido'.

O puede cambiar la solicitud SOAP (del lado de la persona que llama) para establecer mustUnderstand="0" en el encabezado de seguridad.

Ejemplo seguridad encabezado SOAP con mustUnderstand="0":

<S:Header xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <wsse:Security S:mustUnderstand="0" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:UsernameToken> 
     <wsse:Username>USERNAME</wsse:Username> 
     <wsse:Password wsse:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
</S:Header> 
+1

Me gustaría ver más detalles en "configurar un SOAPHandler ficticia para {http://docs.oasis-open.org/wss/2004/01/oasis-200401 -wss-wssecurity-secext-1.0.xsd} Seguridad que marcaría este encabezado como 'entendido'. " – Jono

+1

También me gustaría ver un Manipulador SOAP asfáltico – Frizz

+2

Solo implemente un [SOAPHandler] (http://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/soap/SOAPHandler.html) que devuelve '{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd} Security' from' getHeaders() 'pero cuyo' handle '. .' los métodos no hacen nada (devuelve verdadero). Eso es. – rustyx

2

según la especificación de seguridad WS: el procesador debe, después de descifrar el bloque de cabecera cifrado, proceso el bloque de cabecera descifrado de acuerdo con las directrices de procesamiento de SOAP. El receptor DEBE provocar un error si el contenido requerido para procesar adecuadamente el bloque de encabezado permanece encriptado o si el encabezado SOAP descifrado no se entiende y el valor del atributo S12: mustUnderstand o S11: mustUnderstand en el bloque de encabezado descifrado es verdadero. Tenga en cuenta que para cumplir con las reglas de procesamiento SOAP en este caso, el procesador debe revertir cualquier efecto persistente del procesamiento del encabezado de seguridad, como el almacenamiento de un token recibido. Por lo tanto, verifique la configuración de CallbackHandlers.

+2

Ah, las especificaciones sobredimensionadas se interponen en el camino de hacer las cosas, una vez más. – aroth

-1

en el jabón de interfaz de usuario del navegador,

haga clic con el proyecto-> Mostrar proyecto Ver-> WS-Security Configuraciones-> Configuraciones de salida de WS-Security Deseleccionar debe entender, y luego Enviar petición.

0

El problema es con los controladores. Es necesario añadir siguiente en aplicación manejador

public Set<QName> getHeaders() { 
    final QName securityHeader = new QName(
     "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", 
     "Security", 
     "wsse"); 

    final HashSet headers = new HashSet(); 
    headers.add(securityHeader); 
    return headers; 
} 
Cuestiones relacionadas