Skip to content

Instantly share code, notes, and snippets.

@mh-github
Created August 15, 2015 11:14
Show Gist options
  • Select an option

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

Select an option

Save mh-github/a953c352f1c089be453f to your computer and use it in GitHub Desktop.
package com.mh.project.service;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.jws.HandlerChain;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.WebServiceProvider;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
import org.apache.cxf.message.Message;
import org.w3c.dom.Document;
import org.w3c.dom.Text;
import com.mh.project.util.Customer;
import com.mh.project.util.CustomerCalculator;
@ServiceMode(Service.Mode.PAYLOAD)
@HandlerChain(file = "mySoap_handler.xml")
@WebServiceProvider(wsdlLocation = "WEB-INF/wsdl/Customer.wsdl", targetNamespace = "http://www.mh.org/", serviceName = "CustomerService", portName = "CustomerPort")
public class CustomerEndpoint implements Provider<Source> {
@Resource
WebServiceContext webServiceContext;
private static final Logger LOG = Logger
.getLogger(CustomerEndpoint.class.getName());
public Source invoke(Source request) {
LOG.info("Entered invoke method ... ");
ByteArrayOutputStream baos = null;
try {
// 1. get customer object populated in handler
WrappedMessageContext wmc = (WrappedMessageContext) webServiceContext
.getMessageContext();
Message msg = wmc.getWrappedMessage();
Customer customer = (customer) msg.get("customer");
// 2. business logic: calculate score
double score = new CustomerCalculator().calculate(customer);
LOG.info(Double.valueOf(score).toString());
// 3. return the score
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document respDoc = docBuilder.newDocument();
org.w3c.dom.Element rootElement = respDoc
.createElement("resp");
org.w3c.dom.Element childElement = respDoc.createElement("score");
Text textNode = respDoc.createTextNode(Double.valueOf(score)
.toString());
respDoc.appendChild(rootElement);
rootElement.appendChild(childElement);
childElement.appendChild(textNode);
Transformer xformer = TransformerFactory.newInstance()
.newTransformer();
baos = new ByteArrayOutputStream();
xformer.transform(new DOMSource(respDoc), new StreamResult(baos));
} catch (Exception e) {
e.printStackTrace();
}
return new StreamSource(new StringReader(baos.toString()));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment