Win a copy of The Way of the Web Tester: A Beginner's Guide to Automating Tests this week in the Testing forum!
    Bookmark Topic Watch Topic
  • New Topic

Servlet using SAAJ and HTTP Authorization Header

Julian Noye
Posts: 3
  • Mark post as helpful
  • send pies
  • Report post to moderator
Hi Guys

I am trying to create a servlet that uses SAAJ to communicate with a SOAP webservice.

The webservice uses user/pw in the HTTP Authorization header to validate the request.

My problem is I have not been able to set the user/pw in the HTTP header and I get a 401 return code.

I have based my servlet on this example

Here is my code,


import java.util.Iterator;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

import org.w3c.dom.Node;

public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{

String username = request.getParameter("julian");
String password = request.getParameter("pw");
Integer timeout = new Integer(5*60*1000);
String operation = "getLanguages";
String urn = "LanguagesRequest";
String destination = "";

// First create the connection
SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = soapConnFactory.createConnection();

// Next, create the actual message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();

// Set HTTP headers.
// This does not work!!!
String authorization = new sun.misc.BASE64Encoder().encode((username+":"+password).getBytes());
MimeHeaders hd = message.getMimeHeaders();
hd.addHeader("Authorization", "Basic " + authorization);

// Create and populate the body
SOAPBody body = envelope.getBody();

// Create the main element and namespace

SOAPElement bodyElement = body.addChildElement(
envelope.createName(operation, "ns1", ""));

// Add parameters
envelope = soapPart.getEnvelope();
SOAPHeader sh = envelope.getHeader();
sh = null;

// Save the message
SOAPMessage msg = message;

// Send the message and get the reply
SOAPMessage reply =, destination);

// Retrieve the result - no error checking is done: BAD!
soapPart = reply.getSOAPPart();

body = envelope.getBody();
Iterator iter = body.getChildElements();
Node resultOuter = ((Node);
Node result = resultOuter.getFirstChild();
//System.out.println("add("+arg1+","+arg2+") = "+result.getNodeValue());

// Close the connection
} catch (Exception e) {

PrintWriter pw = response.getWriter();
pw.println("<head><title>Hello World SC API</title></title>");
pw.println("<h1>Hello World SC API 999.0</h1>");
Amol Nayak
Ranch Hand
Posts: 218
  • Mark post as helpful
  • send pies
  • Report post to moderator
Can i know how are you invoking this servlet?
Julian Noye
Posts: 3
  • Mark post as helpful
  • send pies
  • Report post to moderator
Originally posted by Amol Nayak:
Can i know how are you invoking this servlet?

Hi Amol

I'm invoking it from the browser for testing and then via javascript in a html page.

Ulf Dittmer
Posts: 42968
  • Mark post as helpful
  • send pies
  • Report post to moderator
Please do not post the same question to multiple forums: CarefullyChooseOneForum

Let's continue the discussion in this duplicate thread in the Web Services forum where the topic is more at home.
    Bookmark Topic Watch Topic
  • New Topic