Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Scout/Tutorial/3.8/webservices/DatabaseLogHandler"
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | {{ScoutPage|cat=Tutorial 3.8}} | ||
<source lang="java"> | <source lang="java"> | ||
+ | package org.eclipse.scout.tutorial.jaxws.server.services.ws.handler; | ||
+ | |||
+ | import java.io.ByteArrayOutputStream; | ||
+ | import java.util.Date; | ||
+ | import java.util.UUID; | ||
+ | |||
+ | import javax.xml.ws.handler.soap.SOAPMessageContext; | ||
+ | |||
+ | import org.eclipse.scout.commons.StringUtility; | ||
+ | import org.eclipse.scout.commons.exception.ProcessingException; | ||
+ | import org.eclipse.scout.commons.holders.NVPair; | ||
+ | import org.eclipse.scout.commons.logger.IScoutLogger; | ||
+ | import org.eclipse.scout.commons.logger.ScoutLogManager; | ||
+ | import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument; | ||
+ | import org.eclipse.scout.jaxws.annotation.ScoutTransaction; | ||
+ | import org.eclipse.scout.jaxws.handler.LogHandler; | ||
+ | import org.eclipse.scout.rt.server.services.common.jdbc.SQL; | ||
+ | |||
@ScoutTransaction | @ScoutTransaction | ||
public class DatabaseLogHandler extends LogHandler { | public class DatabaseLogHandler extends LogHandler { | ||
Line 41: | Line 60: | ||
, new NVPair("port", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_PORT), "?")) | , new NVPair("port", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_PORT), "?")) | ||
, new NVPair("operation", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_OPERATION), "?")) | , new NVPair("operation", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_OPERATION), "?")) | ||
− | , new NVPair("request", soapMessage) | + | , new NVPair("request", wellformXml(soapMessage)) |
, new NVPair("evtDate", new Date()) | , new NVPair("evtDate", new Date()) | ||
); | ); | ||
Line 52: | Line 71: | ||
"WHERE WS_LOG_NR = :wsLogNr" | "WHERE WS_LOG_NR = :wsLogNr" | ||
, new NVPair("wsLogNr", wsLogNr) | , new NVPair("wsLogNr", wsLogNr) | ||
− | , new NVPair("response", soapMessage) | + | , new NVPair("response", wellformXml(soapMessage)) |
); | ); | ||
} | } | ||
Line 60: | Line 79: | ||
} | } | ||
} | } | ||
− | |||
+ | private String wellformXml(String rawXml) { | ||
+ | try { | ||
+ | ScoutXmlDocument doc = new ScoutXmlDocument(rawXml); | ||
+ | doc.setPrettyPrint(true); | ||
+ | ByteArrayOutputStream os = new ByteArrayOutputStream(); | ||
+ | doc.write(os); | ||
+ | return new String(os.toByteArray(), doc.getXmlEncoding()); | ||
+ | } | ||
+ | catch (Exception e) { | ||
+ | LOG.warn("failed to wellform XML", e); | ||
+ | } | ||
+ | return rawXml; | ||
+ | } | ||
+ | } | ||
</source> | </source> |
Latest revision as of 04:15, 4 May 2012
The Scout documentation has been moved to https://eclipsescout.github.io/.
package org.eclipse.scout.tutorial.jaxws.server.services.ws.handler; import java.io.ByteArrayOutputStream; import java.util.Date; import java.util.UUID; import javax.xml.ws.handler.soap.SOAPMessageContext; import org.eclipse.scout.commons.StringUtility; import org.eclipse.scout.commons.exception.ProcessingException; import org.eclipse.scout.commons.holders.NVPair; import org.eclipse.scout.commons.logger.IScoutLogger; import org.eclipse.scout.commons.logger.ScoutLogManager; import org.eclipse.scout.commons.xmlparser.ScoutXmlDocument; import org.eclipse.scout.jaxws.annotation.ScoutTransaction; import org.eclipse.scout.jaxws.handler.LogHandler; import org.eclipse.scout.rt.server.services.common.jdbc.SQL; @ScoutTransaction public class DatabaseLogHandler extends LogHandler { private static final IScoutLogger LOG = ScoutLogManager.getLogger(DatabaseLogHandler.class); /** * Property to access the primary key of the log entry in the message context. */ public static final String PROP_WS_LOG_NR = UUID.randomUUID().toString(); @Override protected void handleLogMessage(DirectionType directionType, String soapMessage, SOAPMessageContext context) { try { /* * If this handler is invoked to post-process the SOAP-response, the SOAP-request was already logged and * the log's primary key put into the message context. In consequence, the log entry is updated with the SOAP response. */ Long wsLogNr = (Long) context.get(PROP_WS_LOG_NR); if (wsLogNr == null) { // SOAP request wsLogNr = SQL.getSequenceNextval("GLOBAL_SEQ"); context.put(PROP_WS_LOG_NR, wsLogNr); SQL.insert("" + "INSERT INTO WS_LOG " + " (WS_LOG_NR, " + " EVT_DATE, " + " SERVICE, " + " PORT, " + " OPERATION, " + " REQUEST) " + "VALUES (:wsLogNr, " + " :evtDate, " + " :service, " + " :port, " + " :operation, " + " :request)" , new NVPair("wsLogNr", wsLogNr) , new NVPair("service", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_SERVICE), "?")) , new NVPair("port", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_PORT), "?")) , new NVPair("operation", StringUtility.nvl(context.get(SOAPMessageContext.WSDL_OPERATION), "?")) , new NVPair("request", wellformXml(soapMessage)) , new NVPair("evtDate", new Date()) ); } else { // SOAP response SQL.update("" + "UPDATE WS_LOG " + "SET RESPONSE = :response " + "WHERE WS_LOG_NR = :wsLogNr" , new NVPair("wsLogNr", wsLogNr) , new NVPair("response", wellformXml(soapMessage)) ); } } catch (ProcessingException e) { LOG.error("failed to persist webservice-log", e); } } private String wellformXml(String rawXml) { try { ScoutXmlDocument doc = new ScoutXmlDocument(rawXml); doc.setPrettyPrint(true); ByteArrayOutputStream os = new ByteArrayOutputStream(); doc.write(os); return new String(os.toByteArray(), doc.getXmlEncoding()); } catch (Exception e) { LOG.warn("failed to wellform XML", e); } return rawXml; } }