Logo Questions Linux Laravel Mysql Ubuntu Git Menu

Adding ws-security to wsdl2java generated classes

I generated a bunch of client classes from a WSDL with CXF's wsdl2java. How do I add WS-Security to the header when doing something like this:

URL url = new URL("http://fqdn:8080/service/MessageHandler");
MessageHandlerService service = new MessageHandlerService(url);
MessageHandler handler = service.getMessageHandler();
MyMessage message = new MyMessage();
message.setSender("User 1");

I think handler is a javax.xml.ws.Service instance.

like image 236
Mike Thomsen Avatar asked Feb 17 '23 22:02

Mike Thomsen

1 Answers

Usually it's done outside the code .

In that case THIS might help

If you want to add programatically ,

Programmatically adding the WS-Security UsernameToken header to the Axis binding, non-standard, but useful for quick tests. (Stub/Binding: it's the class that ends with _PortType)

  * Adds WS-Security header with UsernameToken element to the Axis binding
  * @param binding
  * @param wsUser
  * @param wsPass
  * @throws SOAPException
 protected static void addWsSecurityHeader(org.apache.axis.client.Stub binding, String wsUser, String wsPass)
   throws SOAPException {

  // Create the top-level WS-Security SOAP header XML name.
  QName headerName = new QName(
    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
  SOAPHeaderElement header = new SOAPHeaderElement(headerName);
  //  no intermediate actors are involved.
  // not important, "wsse" is standard

  // Add the UsernameToken element to the WS-Security header
  SOAPElement utElem = header.addChildElement("UsernameToken");
  SOAPElement userNameElem = utElem.addChildElement("Username");
  SOAPElement passwordElem = utElem.addChildElement("Password");

  // Finally, attach the header to the binding.
like image 173
TheWhiteRabbit Avatar answered Feb 26 '23 22:02