title: WebService Client using Apache Axis with WS-Security. No Username Security Token found
body: <p>I've been trying to write a <code>webservice</code> client using Apache Axis in <code>Intellij</code> Idea 13 and having some difficulties. I already can connect that <code>webservice</code> with a .net c# project and now i need to achieve that with java. <code>WebService</code> wants username and password within a security header. </p>
  
  <p>Here is the response from WebService:</p>
  
  <blockquote>
    <p>nested fault: No Username Security Token found in the WS block with actor: current actor</p>
  </blockquote>
  
  <p>Here is the code that i use.</p>
  
  <pre><code>SomeWebServiceServiceLocator locator = new SomeWebServiceServiceLocator();
  SomeWebServicePortBindingStub stub = (SomeWebServicePortBindingStub) locator.getSomeWebServicePort();
  stub.setUsername("usr111");
  stub.setPassword("pass111");
  
  SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
  javax.xml.soap.SOAPPart sOAPPart = soapMessage.getSOAPPart();
  SOAPEnvelope envelope = sOAPPart.getEnvelope();
  SOAPHeader header = envelope.getHeader();
  
  if (header == null) {
              System.out.println("no header yet, create one");
              header = envelope.addHeader();
          }
          SOAPElement security = header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
  
          Name tUserTokenElementName = envelope.createName("UsernameToken", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
          SOAPElement tUserTokenElement = security.addChildElement(tUserTokenElementName);
          tUserTokenElement.removeNamespaceDeclaration("wsse");
          tUserTokenElement.addNamespaceDeclaration("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
          //
          tUserTokenElement.addAttribute(new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "u"), "UsernameToken-usr111");
  
          // user name child
          Name tUsernameElementName = envelope.createName("Username", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
          SOAPElement tUsernameElement = tUserTokenElement.addChildElement(tUsernameElementName);
          tUsernameElement.removeNamespaceDeclaration("wsse");
          tUsernameElement.addTextNode("usr111");
  
          // password child
          Name tPasswordElementName = envelope.createName("Password", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
          SOAPElement tPasswordElement = tUserTokenElement.addChildElement(tPasswordElementName);
          tPasswordElement.removeNamespaceDeclaration("wsse");
          tPasswordElement.addTextNode("pass111");
          tPasswordElement.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
  
          Element assertion = (Element) security;
          SOAPHeaderElement header0 = new SOAPHeaderElement(assertion);
          stub.setHeader(header0);
  </code></pre>
  
  <p>That code generates following header.</p>
  
  <pre><code>&lt;wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:actor="" soapenv:mustUnderstand="0" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
  &lt;wsse:UsernameToken wsu:Id="UsernameToken-usr111" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;
      &lt;wsse:Username&gt;usr111&lt;/wsse:Username&gt;
      &lt;wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;pass111&lt;/wsse:Password&gt;
  &lt;/wsse:UsernameToken&gt; &lt;/wsse:Security&gt;
  </code></pre>
  
  <p>I also trace the working .net cs application's connection with Fiddler but failed to trace my java call. Here is the working request's header.</p>
  
  <pre><code>&lt;s:Header&gt;
      &lt;VsDebuggerCausalityData xmlns="http://schemas.microsoft.com/vstudio/diagnostics/servicemodelsink"&gt;uIDPo1zQ7/YYhJpArMKDUdofV4QAAAAAvGLoItf+KkC8k4KQjqtXUK0D00UQcXJBtCFGkgP0qBkACQAA&lt;/VsDebuggerCausalityData&gt;
      &lt;o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;
          &lt;o:UsernameToken u:Id="uuid-de9cefc3-6ab9-407f-8658-7ecf007559bc-17"&gt;
              &lt;o:Username&gt;usr111&lt;/o:Username&gt;
              &lt;o:Password o:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;pass111&lt;/o:Password&gt;
          &lt;/o:UsernameToken&gt;
      &lt;/o:Security&gt;
  &lt;/s:Header&gt;
  </code></pre>
  
  <p>Also here's a example <code>xml</code> provided from <code>webservice</code> owner</p>
  
  <pre><code>&lt;soapenv:Header&gt;
    &lt;wsse:Security soapenv:mustUnderstand="0" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;
       &lt;wsse:UsernameToken wsu:Id="UsernameToken-11111111" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&gt;
         &lt;wsse:Username&gt;someuser&lt;/wsse:Username&gt;
          &lt;wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"&gt;*****&lt;/wsse:Password&gt;
       &lt;/wsse:UsernameToken&gt;
    &lt;/wsse:Security&gt;
  </code></pre>
  
  <p></p>
  
  <p>There is also two .crt certificates provided by owner of webservice. I added them to the javakeystore but it helps nothing.
  Finally i can't request that <code>webservice</code> with SoapUI.</p>