Skip to content

Instantly share code, notes, and snippets.

@dilnei
Created July 13, 2016 19:23
Show Gist options
  • Save dilnei/b5730a56b43a3210eafff4102a28d9fe to your computer and use it in GitHub Desktop.
Save dilnei/b5730a56b43a3210eafff4102a28d9fe to your computer and use it in GitHub Desktop.
custom soap handler
package br.com.your_projet.ws.handle;
import java.io.StringWriter;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
/**
* <b>Customizado SOAPHandler para o projeto your_projet.</b>
*
* @author Dilnei Cunha
*/
public class CustomSOAPHandle implements SOAPHandler<SOAPMessageContext> {
Logger logger = Logger.getLogger(CustomSOAPHandle.class.getName());
/**
* <b>Método responsável por tratar as mensagens de entrada e saida do
* SOAP.</b>
*
* @param context
* @return boolean
*/
@Override
public boolean handleMessage(final SOAPMessageContext context) {
final Boolean isSoapResponse = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (isSoapResponse) {
return handleOutgoingMessage(context);
} else {
return handleIncomingMessage(context);
}
}
/**
* <b>Este método é executado quando possui algum problema com a mensagem
* SOAP.</b>
*
* @param context
* @return boolean
*/
@Override
public boolean handleFault(final SOAPMessageContext context) {
StringWriter sw = new StringWriter();
Source source;
try {
SOAPMessage msg = context.getMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
SOAPBody body = env.getBody();
source = new DOMSource(body.getFirstChild());
TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(sw));
logger.info(sw.toString());
} catch (TransformerFactoryConfigurationError | Exception e) {
logger.info(e.getMessage());
}
return false;
}
@Override
public void close(final MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
/**
* <b>Loga as requisições SOAP.</b>
*
* @param context
* @return boolean
*/
private boolean handleIncomingMessage(SOAPMessageContext context) {
StringWriter sw = new StringWriter();
Source source;
try {
source = new DOMSource(context.getMessage().getSOAPPart().getEnvelope().getBody());
TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(sw));
logger.info(sw.toString());
} catch (SOAPException | TransformerException | TransformerFactoryConfigurationError e) {
logger.log(Level.SEVERE, e.getMessage());
}
return true;
}
/**
* <b>Método que trata as mensagens de saida do SOAP.</b>
*
* @param context
* @return boolean
*/
private boolean handleOutgoingMessage(SOAPMessageContext context) {
StringWriter sw = new StringWriter();
Source source;
try {
SOAPMessage msg = context.getMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
SOAPBody body = env.getBody();
source = new DOMSource(body.getFirstChild());
TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(sw));
logger.info(sw.toString());
} catch (TransformerFactoryConfigurationError | Exception e) {
logger.log(Level.SEVERE, e.getMessage());
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment