All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.synapse.format.syslog.SyslogMessageBuilder Maven / Gradle / Ivy

/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package org.apache.synapse.format.syslog;

import java.io.IOException;
import java.io.InputStream;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.builder.Builder;
import org.apache.axis2.context.MessageContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Message builder for syslog events.
 * 

* See {@link org.apache.synapse.format.syslog} for a description of how to use * this class. */ public class SyslogMessageBuilder implements Builder { private static final Log log = LogFactory.getLog(SyslogMessageBuilder.class); private static final String[] facilityNames = { "kern", "user", "mail", "daemon", "auth", "syslog", "lpr", "news", "uucp", "cron", "authpriv", "ftp", "reserved0", "reserved1", "reserved2", "reserved3", "local0", "local1", "local2", "local3", "local4", "local5", "local6", "local7" }; private static final String[] severityNames = { "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug" }; @Override public OMElement processDocument(InputStream inputStream, String contentType, MessageContext messageContext) throws AxisFault { String facility = null; String severity = null; String tag = null; int pid = -1; String content = null; InputStreamConsumer in = new InputStreamConsumer(inputStream); try { StringBuilder buffer = new StringBuilder(); in.consume('<'); int priority = in.getInteger(3); if (priority > 199) { throw new ProtocolException("Invalid priority value (greater than 199)"); } in.consume('>'); severity = severityNames[priority & 7]; facility = facilityNames[priority >> 3]; int savedPosition = in.getPosition(); try { outer: while (true) { int next = in.next(); switch (next) { case '[': in.consume(); pid = in.getInteger(6); in.consume(']'); in.expect(':'); // Fall through case ':': in.consume(); in.consume(' '); tag = buffer.toString(); break outer; case ' ': case -1: throw new ProtocolException("Unexpected end of tag"); default: in.consume(); buffer.append((char)next); } } } catch (ProtocolException ex) { in.setPosition(savedPosition); } buffer.setLength(0); while (true) { int next = in.next(); if (next == '\n') { in.consume(); in.consume(-1); // Fall through } else if (next == -1) { content = buffer.toString(); break; } else { in.consume(); buffer.append((char)next); } } } catch (ProtocolException ex) { log.error("Protocol error: " + ex.getMessage() + " [pri=" + facility + "." + severity + " tag=" + tag + " pid=" + pid + "]"); throw new AxisFault("Protocol error", ex); } catch (IOException ex) { throw new AxisFault("I/O error", ex); } OMFactory factory = OMAbstractFactory.getOMFactory(); OMElement message = factory.createOMElement(SyslogConstants.MESSAGE); message.addAttribute(factory.createOMAttribute(SyslogConstants.FACILITY, null, facility)); message.addAttribute(factory.createOMAttribute(SyslogConstants.SEVERITY, null, severity)); if (tag != null) { message.addAttribute(factory.createOMAttribute(SyslogConstants.TAG, null, tag)); } if (pid != -1) { message.addAttribute(factory.createOMAttribute(SyslogConstants.PID, null, String.valueOf(pid))); } message.setText(content); return message; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy