Eso configurará el nombre de usuario y la contraseña para la autenticación HTTP básica. Si lo has probado en SoapUI, supongo que el valor 'PasswordText' del que hablas es 'WSS-Password Type' en el panel de detalles de la solicitud. Eso establece la seguridad de WSS, no la seguridad de HTTP.
Con JAX-WS en Java6, debe conectar un manejador SOAP para inyectar WSS-Usertoken en el encabezado SOAP. Hay muchos detalles sobre esta red, pero no pude encontrar un solo enlace para publicar, así que aquí hay un código para ponerlo en marcha ...
Para agregar un controlador, necesita algo como:
final Binding binding = ((BindingProvider) servicePort).getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null)
handlerList = new ArrayList<Handler>();
handlerList.add(new SecurityHandler());
binding.setHandlerChain(handlerList); // <- important!
A continuación, la clase SecurityHandler hará la escritura. Los manipuladores son cosas generales y reciben llamadas tanto para mensajes exitosos como para fallas, pero tal vez lo más importante sea que se llamen en ambas direcciones de mensajes - para la solicitud saliente y luego nuevamente para la respuesta entrante. Solo quieres gestionar los mensajes salientes. Por lo que tendrá algo como:
public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {
...
@Override
public boolean handleMessage(final SOAPMessageContext msgCtx) {
// Indicator telling us which direction this message is going in
final Boolean outInd = (Boolean) msgCtx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// Handler must only add security headers to outbound messages
if (outInd.booleanValue()) {
try {
// Get the SOAP Envelope
final SOAPEnvelope envelope = msgCtx.getMessage().getSOAPPart().getEnvelope();
// Header may or may not exist yet
SOAPHeader header = envelope.getHeader();
if (header == null)
header = envelope.addHeader();
// Add WSS Usertoken Element Tree
final SOAPElement security = header.addChildElement("Security", "wsse",
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
final SOAPElement userToken = security.addChildElement("UsernameToken", "wsse");
userToken.addChildElement("Username", "wsse").addTextNode("MyWSSUsername");
userToken.addChildElement("Password", "wsse").addTextNode("MyWSSPassword");
} catch (final Exception e) {
LOG.error(e);
return false;
}
}
return true;
}
...
// Other required methods on interface need no guts
}
que he hecho algunas suposiciones aquí, pero espero que ponerlas a ir!
Saludos cordiales.
Gracias. Esto funcionó perfectamente y su respuesta fue casi imposible de encontrar buscando en Google, así que permítanme agregar algunas palabras clave. JAX-WS WSSE – Jimmy2Times
Al utilizar este código obtuve la siguiente excepción en el registro: 'com.sun.xml.internal.messaging.saaj.soap.impl.ElementImpl addChildElement SEVERE: SAAJ0101: el elemento principal de un SOAPBodyElement debe ser un SOAPBody'. – Vic