package org.jboss.test.webservice.header;
import org.jboss.logging.Logger;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.server.ServiceLifecycle;
import javax.xml.rpc.server.ServletEndpointContext;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import java.rmi.RemoteException;
import java.util.Iterator;
public class ImplicitHeaderEndpointImpl implements ImplicitHeaderEndpoint, ServiceLifecycle
{
private final Logger log = Logger.getLogger(ImplicitHeaderEndpointImpl.class);
private static final String NAMESPACE_URI = ImplicitHeaderEndpoint.NAMESPACE_URI;
private static final String PREFIX = ImplicitHeaderEndpoint.PREFIX;
private ServletEndpointContext context;
public boolean doStuff(String parameter) throws RemoteException
{
if (parameter == null)
throw new IllegalArgumentException("Null parameter");
try
{
SOAPFactory factory = SOAPFactory.newInstance();
SOAPMessageContext msgContext = (SOAPMessageContext)context.getMessageContext();
SOAPMessage soapMessage = msgContext.getMessage();
SOAPHeader soapHeader = soapMessage.getSOAPHeader();
Iterator it = soapHeader.extractAllHeaderElements();
if (it.hasNext() == false)
throw new IllegalArgumentException("No header elements");
SOAPHeaderElement headerElement = (SOAPHeaderElement)it.next();
Name usernameName = factory.createName("username", PREFIX, NAMESPACE_URI);
SOAPElement usrElement = (SOAPElement)headerElement.getChildElements(usernameName).next();
String username = usrElement.getValue();
Name sessionIDName = factory.createName("sessionID", PREFIX, NAMESPACE_URI);
SOAPElement seElement = (SOAPElement)headerElement.getChildElements(sessionIDName).next();
String sessionID = seElement.getValue();
log.info("username: " + username);
log.info("sessionID: " + sessionID);
return true;
}
catch (SOAPException e)
{
log.error(e);
return false;
}
}
public void init(Object context) throws ServiceException
{
log.info("init: " + context);
this.context = (ServletEndpointContext)context;
}
public void destroy()
{
log.info("destroy: " + context);
}
}