Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save mh-github/475a15a325309d9ffc58 to your computer and use it in GitHub Desktop.

Select an option

Save mh-github/475a15a325309d9ffc58 to your computer and use it in GitHub Desktop.
package com.mh.project.service;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.filter.Filters;
import org.jdom2.input.DOMBuilder;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;
import com.mh.project.util.Customer;
/**
* @author mahboob
*
*/
public class mySoapHandler implements SOAPHandler<SOAPMessageContext> {
private static final Logger LOG = Logger.getLogger(mySoapHandler.class
.getName());
@Override
public boolean handleMessage(SOAPMessageContext context) {
LOG.info("Entered handleMessage method ... ");
boolean isResponse = (boolean) context
.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!isResponse) {
try {
// extract SOAP Body, convert to jdom Document
// and do jdom xpath parsing
SOAPMessage soapMsg = context.getMessage();
SOAPBody soapBody = soapMsg.getSOAPBody();
org.w3c.dom.Document document = soapBody
.extractContentAsDocument();
DOMBuilder builder = new DOMBuilder();
// convert w3c document to jdom Document
Document reqDoc = builder.build(document);
Customer customer = new Customer();
XPathFactory xFactory = XPathFactory.instance();
XPathExpression<Element> expr;
List<Element> elements;
Element element;
// fetch first and last name
expr = xFactory.compile("/req/prospect/customer/contact/name",
Filters.element());
elements = expr.evaluate(reqDoc);
for (Element elmnt : elements) {
String name = elmnt.getValue();
switch (elmnt.getAttributeValue("part")) {
case "first":
customer.setFirstName(name);
break;
case "last":
customer.setLastName(name);
}
}
// fetch email
expr = xFactory.compile("/req/prospect/customer/contact/email",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setEmail(element.getValue());
// fetch zip code
expr = xFactory.compile(
"/req/prospect/customer/contact/address/postalcode",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setZip(element.getValue());
// fetch city
expr = xFactory.compile(
"/req/prospect/customer/contact/address/city",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setCity(element.getValue());
// fetch state
expr = xFactory.compile(
"/req/prospect/customer/contact/address/regioncode",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setState(element.getValue());
// fetch phone number
expr = xFactory.compile("/req/prospect/customer/contact/phone",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setPhone(element.getValue());
// fetch time frame
expr = xFactory.compile("/req/prospect/customer/timeframe",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setTimeframe(element.getValue());
// fetch purchase type
expr = xFactory.compile("/req/prospect/vehicle/finance/method",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null)
customer.setPurchaseType(element.getValue());
// contact type preference
expr = xFactory.compile("/req/prospect/customer/contact/phone",
Filters.element());
element = expr.evaluateFirst(reqDoc);
if (element != null) {
customer.setContactType(element.getAttributeValue("type"));
customer.setContactTimePreference(element
.getAttributeValue("time"));
}
context.put("customer", customer);
context.setScope("customer", MessageContext.Scope.APPLICATION);
} catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
// TODO Auto-generated method stub
return false;
}
@Override
public void close(MessageContext context) {
// TODO Auto-generated method stub
}
@Override
public Set<QName> getHeaders() {
// TODO Auto-generated method stub
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment