Created
July 13, 2016 19:23
-
-
Save dilnei/b5730a56b43a3210eafff4102a28d9fe to your computer and use it in GitHub Desktop.
custom soap handler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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