title: Java - Send SOAP header (for authentication)
body: <p>I've generated some Java code from a wsdl file and the request itself seems to be working, but I can't send my credentials. </p>
  
  <p>I've tested the Webservice with a tool called "SoapUI" and everything seemes to be working like a charm. </p>
  
  <p>Here is an example of the (working) xml:</p>
  
  <pre><code>&lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:beac="url"&gt;
    &lt;soapenv:Header&gt;
      &lt;nsAuthn:authnHeader xmlns:nsAuthn="url/auth"&gt;
        &lt;nsAuthn:id&gt;id&lt;/nsAuthn:id&gt;
        &lt;nsAuthn:password&gt;password&lt;/nsAuthn:password&gt;
      &lt;/nsAuthn:authnHeader&gt;
    &lt;/soapenv:Header&gt;
    &lt;soapenv:Body&gt;
      &lt;beac:getData&gt;
        &lt;saisonid&gt;int&lt;/saisonid&gt;
      &lt;/beac:getData&gt;
    &lt;/soapenv:Body&gt;
  &lt;/soapenv:Envelope&gt;
  </code></pre>
  
  <p>And this is my attempt:</p>
  
  <pre><code>public RankDtoResponse getData(int saisonid) throws java.rmi.RemoteException, SOAPException {
      if (super.cachedEndpoint == null) {
          throw new org.apache.axis.NoEndPointException();
      }
  
      SOAPHeaderElement authentication = new SOAPHeaderElement("url","auth");
      SOAPHeaderElement user = new SOAPHeaderElement("url","id", "id");
      SOAPHeaderElement password = new SOAPHeaderElement("url","password", "password");
      try {
          authentication.addChild(user);
          authentication.addChild(password);
      } catch (SOAPException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  
      org.apache.axis.client.Call _call = createCall();
      _call.setOperation(_operations[3]);
      _call.setUseSOAPAction(true);
      _call.setSOAPActionURI("");
      _call.setEncodingStyle(null);
      _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
      _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
      _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS); 
      _call.setOperationName(new javax.xml.namespace.QName("url", "getData"));
  
  
      setHeader(authentication);
      setRequestHeaders(_call);
      setAttachments(_call);
      try {        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {new java.lang.Integer(saisonid)});
  
      if (_resp instanceof java.rmi.RemoteException) {
          throw (java.rmi.RemoteException)_resp;
      }
      else {
          extractAttachments(_call);
          try {
              return (RankDtoResponse) _resp;
          } catch (java.lang.Exception _exception) {
              return (RankDtoResponse) org.apache.axis.utils.JavaUtils.convert(_resp, RankDtoResponse.class);
          }
      }
      } catch (org.apache.axis.AxisFault axisFaultException) {
        if (axisFaultException.detail != null) {
          if (axisFaultException.detail instanceof java.rmi.RemoteException) {
            throw (java.rmi.RemoteException) axisFaultException.detail;
          }
          if (axisFaultException.detail instanceof SOAPException) {
            throw (SOAPException) axisFaultException.detail;
          }
      }
      throw axisFaultException;
    }  
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>AxisFault
  faultCode: 1-1-3
  faultSubcode: 
  faultString: Could not authenticate, credentials not specified
  faultActor: 
  faultNode: 
  faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:Could not authenticate, credentials not specified
    at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
    at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
    at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at getData.getData(getData.java:496)
    at Client.main(Client.java:20) 
  </code></pre>
  
  <p>Most of the code is autogenerated from a wsdl file by wsdl2java.</p>
  
  <p>Do you need any more information? Am I missing something out?</p>
  
  <p>Thanks in advance</p>