You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/12/30 15:05:41 UTC
svn commit: r894615 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/
systests/jaxrs/src/test/resources/jaxrs_logging_atompull/
systests/jaxrs/src/test/res...
Author: sergeyb
Date: Wed Dec 30 14:05:41 2009
New Revision: 894615
URL: http://svn.apache.org/viewvc?rev=894615&view=rev
Log:
Prototyping an AtomPullServer for feeding log events, more to come
Added:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java (with props)
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java (with props)
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java (with props)
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java (with props)
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml (with props)
cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml (with props)
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java?rev=894615&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java Wed Dec 30 14:05:41 2009
@@ -0,0 +1,167 @@
+/**
+ * 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.cxf.jaxrs.ext.logging.atom;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.logging.Handler;
+import java.util.logging.Logger;
+
+import org.apache.commons.lang.Validate;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.ext.logging.LogLevel;
+
+
+public abstract class AbstractAtomBean {
+
+ private List<LoggerLevel> loggers = new ArrayList<LoggerLevel>();
+ private boolean initialized;
+
+ /**
+ * Creates unconfigured and uninitialized bean. To configure setters must be used, then {@link #init()}
+ * must be called.
+ */
+ public AbstractAtomBean() {
+ initSingleLogger();
+ }
+
+ private void initSingleLogger() {
+ loggers = new ArrayList<LoggerLevel>();
+ loggers.add(new LoggerLevel("", "INFO"));
+ }
+
+
+ /**
+ * Set one or more loggers and levels descriptor. <br>
+ * Parsed input syntax is:
+ *
+ * <pre>
+ * loggers := <logger>(<separator><logger>)*
+ * logger := <name>[":"<level>]
+ * separator := "," | " " | "\n"
+ * </pre>
+ *
+ * Examples:
+ * <p>
+ * Two loggers and two levels: <br>
+ * <tt>org.apache.cxf:INFO, org.apache.cxf.jaxrs:DEBUG</tt>
+ * <p>
+ * Three loggers, first with default "INFO" level: <br>
+ * <tt>org.apache.cxf, org.apache.cxf.jaxrs:DEBUG, namedLogger:ERROR</tt><br>
+ * <p>
+ * One logger with default "INFO" level: <br>
+ * <tt>org.apache.cxf</tt><br>
+ */
+ public void setLoggers(String loggers) {
+ checkInit();
+ Validate.notNull(loggers, "loggers is null");
+ parseLoggers(loggers);
+ }
+
+ /**
+ * Name of logger to associate with ATOM push handler; empty string for root logger.
+ */
+ public void setLogger(String logger) {
+ checkInit();
+ Validate.notNull(logger, "logger is null");
+ if (loggers.size() != 1) {
+ initSingleLogger();
+ }
+ loggers.get(0).setLogger(logger);
+ }
+
+ /**
+ * Name of level that logger will use publishing log events to ATOM push handler; empty string for default
+ * "INFO" level.
+ */
+ public void setLevel(String level) {
+ checkInit();
+ Validate.notNull(level, "level is null");
+ if (loggers.size() != 1) {
+ initSingleLogger();
+ }
+ loggers.get(0).setLevel(level);
+ }
+
+
+ /**
+ * Initializes bean; creates ATOM push handler based on current properties state, and attaches handler to
+ * logger(s).
+ */
+ public void init() {
+ checkInit();
+ initialized = true;
+ Handler h = createHandler();
+ for (int i = 0; i < loggers.size(); i++) {
+ Logger l = LogUtils.getL7dLogger(AbstractAtomBean.class, null, loggers.get(i).getLogger());
+ l.addHandler(h);
+ l.setLevel(LogLevel.toJUL(LogLevel.valueOf(loggers.get(i).getLevel())));
+ }
+ }
+
+ protected abstract Handler createHandler();
+
+ protected void checkInit() {
+ if (initialized) {
+ throw new IllegalStateException("Bean is already initialized");
+ }
+ }
+
+ private void parseLoggers(String param) {
+ loggers = new ArrayList<LoggerLevel>();
+ StringTokenizer st1 = new StringTokenizer(param, ", \t\n\r\f");
+ while (st1.hasMoreTokens()) {
+ String tok = st1.nextToken();
+ int idx = tok.indexOf(":");
+ if (idx != -1) {
+ loggers.add(new LoggerLevel(tok.substring(0, idx), tok.substring(idx + 1, tok.length())));
+ } else {
+ loggers.add(new LoggerLevel(tok, "INFO"));
+ }
+ }
+ }
+
+ private static class LoggerLevel {
+ private String logger;
+ private String level;
+
+ public LoggerLevel(String logger, String level) {
+ this.logger = logger;
+ this.level = level;
+ }
+
+ public String getLogger() {
+ return logger;
+ }
+
+ public void setLogger(String logger) {
+ this.logger = logger;
+ }
+
+ public String getLevel() {
+ return level;
+ }
+
+ public void setLevel(String level) {
+ this.level = level;
+ }
+
+ }
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AbstractAtomBean.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java?rev=894615&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java Wed Dec 30 14:05:41 2009
@@ -0,0 +1,53 @@
+/**
+ * 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.cxf.jaxrs.ext.logging.atom;
+
+import java.util.logging.Handler;
+
+import org.apache.cxf.jaxrs.ext.logging.LogRecord;
+
+
+public final class AtomPullHandler extends Handler {
+
+ private AtomPullServer engine;
+ /**
+ * Creates handler using (package private).
+ *
+ * @param engine configured engine.
+ */
+ AtomPullHandler(AtomPullServer engine) {
+ this.engine = engine;
+ }
+
+ @Override
+ public void publish(java.util.logging.LogRecord record) {
+ LogRecord rec = LogRecord.fromJUL(record);
+ engine.publish(rec);
+ }
+
+ @Override
+ public synchronized void close() throws SecurityException {
+ engine.close();
+ }
+
+ @Override
+ public synchronized void flush() {
+ // no-op
+ }
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullHandler.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java?rev=894615&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java Wed Dec 30 14:05:41 2009
@@ -0,0 +1,69 @@
+/**
+ * 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.cxf.jaxrs.ext.logging.atom;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Handler;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Feed;
+import org.apache.cxf.jaxrs.ext.logging.LogRecord;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Format;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Multiplicity;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Output;
+
+@Path("logs")
+public class AtomPullServer extends AbstractAtomBean {
+
+ private StandardConverter converter =
+ new StandardConverter(Output.FEED, Multiplicity.MANY, Format.CONTENT);
+ private List<LogRecord> records = new LinkedList<LogRecord>();
+
+ @GET
+ @Produces("application/atom+xml")
+ public Feed getAllRecords() {
+ //TODO: this is quite clumsy, think of something better
+ List<? extends Element> elements = null;
+ synchronized (records) {
+ elements = converter.convert(records);
+ }
+ return (Feed)(elements.get(0));
+ }
+
+ @Override
+ protected Handler createHandler() {
+ return new AtomPullHandler(this);
+ }
+
+ public void publish(LogRecord record) {
+ synchronized (records) {
+ records.add(record);
+ }
+ }
+
+ public void close() {
+ // save records somehow
+ }
+}
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPullServer.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java?rev=894615&r1=894614&r2=894615&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java Wed Dec 30 14:05:41 2009
@@ -18,15 +18,9 @@
*/
package org.apache.cxf.jaxrs.ext.logging.atom;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
import java.util.logging.Handler;
-import java.util.logging.Logger;
import org.apache.commons.lang.Validate;
-import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.jaxrs.ext.logging.LogLevel;
import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
@@ -83,23 +77,15 @@
* </bean>
* </pre>
*/
-public final class AtomPushBean {
+public final class AtomPushBean extends AbstractAtomBean {
private AtomPushEngineConfigurator conf = new AtomPushEngineConfigurator();
- private List<LoggerLevel> loggers = new ArrayList<LoggerLevel>();
- private boolean initialized;
-
+
/**
* Creates unconfigured and uninitialized bean. To configure setters must be used, then {@link #init()}
* must be called.
*/
public AtomPushBean() {
- initSingleLogger();
- }
-
- private void initSingleLogger() {
- loggers = new ArrayList<LoggerLevel>();
- loggers.add(new LoggerLevel("", "INFO"));
}
/**
@@ -128,59 +114,7 @@
Validate.notNull(converter, "converter is null");
conf.setConverter(converter);
}
-
- /**
- * Set one or more loggers and levels descriptor. <br>
- * Parsed input syntax is:
- *
- * <pre>
- * loggers := <logger>(<separator><logger>)*
- * logger := <name>[":"<level>]
- * separator := "," | " " | "\n"
- * </pre>
- *
- * Examples:
- * <p>
- * Two loggers and two levels: <br>
- * <tt>org.apache.cxf:INFO, org.apache.cxf.jaxrs:DEBUG</tt>
- * <p>
- * Three loggers, first with default "INFO" level: <br>
- * <tt>org.apache.cxf, org.apache.cxf.jaxrs:DEBUG, namedLogger:ERROR</tt><br>
- * <p>
- * One logger with default "INFO" level: <br>
- * <tt>org.apache.cxf</tt><br>
- */
- public void setLoggers(String loggers) {
- checkInit();
- Validate.notNull(loggers, "loggers is null");
- parseLoggers(loggers);
- }
-
- /**
- * Name of logger to associate with ATOM push handler; empty string for root logger.
- */
- public void setLogger(String logger) {
- checkInit();
- Validate.notNull(logger, "logger is null");
- if (loggers.size() != 1) {
- initSingleLogger();
- }
- loggers.get(0).setLogger(logger);
- }
-
- /**
- * Name of level that logger will use publishing log events to ATOM push handler; empty string for default
- * "INFO" level.
- */
- public void setLevel(String level) {
- checkInit();
- Validate.notNull(level, "level is null");
- if (loggers.size() != 1) {
- initSingleLogger();
- }
- loggers.get(0).setLevel(level);
- }
-
+
/**
* Size of batch; empty string for default one element batch.
*/
@@ -253,65 +187,8 @@
conf.setFormat(format);
}
- /**
- * Initializes bean; creates ATOM push handler based on current properties state, and attaches handler to
- * logger(s).
- */
- public void init() {
- checkInit();
- initialized = true;
- Handler h = new AtomPushHandler(conf.createEngine());
- for (int i = 0; i < loggers.size(); i++) {
- Logger l = LogUtils.getL7dLogger(AtomPushBean.class, null, loggers.get(i).getLogger());
- l.addHandler(h);
- l.setLevel(LogLevel.toJUL(LogLevel.valueOf(loggers.get(i).getLevel())));
- }
- }
-
- private void checkInit() {
- if (initialized) {
- throw new IllegalStateException("Bean is already initialized");
- }
- }
-
- private void parseLoggers(String param) {
- loggers = new ArrayList<LoggerLevel>();
- StringTokenizer st1 = new StringTokenizer(param, ", \t\n\r\f");
- while (st1.hasMoreTokens()) {
- String tok = st1.nextToken();
- int idx = tok.indexOf(":");
- if (idx != -1) {
- loggers.add(new LoggerLevel(tok.substring(0, idx), tok.substring(idx + 1, tok.length())));
- } else {
- loggers.add(new LoggerLevel(tok, "INFO"));
- }
- }
- }
-
- private static class LoggerLevel {
- private String logger;
- private String level;
-
- public LoggerLevel(String logger, String level) {
- this.logger = logger;
- this.level = level;
- }
-
- public String getLogger() {
- return logger;
- }
-
- public void setLogger(String logger) {
- this.logger = logger;
- }
-
- public String getLevel() {
- return level;
- }
-
- public void setLevel(String level) {
- this.level = level;
- }
-
+ protected Handler createHandler() {
+ return new AtomPushHandler(conf.createEngine());
}
+
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java?rev=894615&r1=894614&r2=894615&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java Wed Dec 30 14:05:41 2009
@@ -123,11 +123,11 @@
if (converterClass != null) {
c = createConverter(converterClass);
} else {
- Output out = parseEnum(output, Output.FEED);
+ Output out = parseEnum(output, Output.FEED, Output.class);
Multiplicity defaultMul = out == Output.FEED ? Multiplicity.MANY
: batch > 1 ? Multiplicity.MANY : Multiplicity.ONE;
- Multiplicity mul = parseEnum(multiplicity, defaultMul);
- Format form = parseEnum(format, Format.CONTENT);
+ Multiplicity mul = parseEnum(multiplicity, defaultMul, Multiplicity.class);
+ Format form = parseEnum(format, Format.CONTENT, Format.class);
if (out == Output.FEED) {
c = new StandardConverter(out, mul, form);
} else {
@@ -201,12 +201,12 @@
}
@SuppressWarnings("unchecked")
- private <T extends Enum<T>> T parseEnum(String value, T defaultValue) {
+ private <T extends Enum<T>> T parseEnum(String value, T defaultValue, Class<T> enumClass) {
if (value == null | "".equals(value)) {
return defaultValue;
}
try {
- return (T)Enum.valueOf(defaultValue.getClass(), value.toUpperCase());
+ return (T)Enum.valueOf(enumClass, value.toUpperCase());
} catch (Exception e) {
return defaultValue;
}
Added: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java?rev=894615&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java (added)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java Wed Dec 30 14:05:41 2009
@@ -0,0 +1,163 @@
+/**
+ * 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.cxf.systest.jaxrs;
+
+import java.io.StringReader;
+import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.xml.bind.JAXBContext;
+
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.provider.AtomFeedProvider;
+import org.apache.cxf.testutil.common.AbstractClientServerTestBase;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class JAXRSLoggingAtomPullSpringTest extends AbstractClientServerTestBase {
+
+ private JAXBContext context;
+ private int fakyLogger;
+ private int namedLogger;
+ private int resourceLogger;
+ private int throwables;
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ // must be 'in-process' to communicate with inner class in single JVM
+ // and to spawn class SpringServer w/o using main() method
+ launchServer(SpringServer.class, true);
+ }
+
+ @Ignore
+ public static class SpringServer extends AbstractSpringServer {
+ public SpringServer() {
+ super("/jaxrs_logging_atompull");
+ }
+ }
+
+ @Before
+ public void before() throws Exception {
+ context = JAXBContext.newInstance(org.apache.cxf.jaxrs.ext.logging.LogRecord.class);
+ }
+
+ @Test
+ public void testFeed() throws Exception {
+ WebClient wc = WebClient.create("http://localhost:9080/resource/root");
+ wc.path("/log").get();
+ Thread.sleep(3000);
+
+ WebClient wc2 = WebClient.create("http://localhost:9080/atom/logs",
+ Collections.singletonList(new AtomFeedProvider()));
+ Feed feed = wc2.accept("application/atom+xml").get(Feed.class);
+ feed.toString();
+ assertEquals(8, feed.getEntries().size());
+
+ resetCounters();
+ for (Entry e : feed.getEntries()) {
+ updateCounters(readLogRecord(e.getContent()), "Resource");
+ }
+
+ verifyCounters();
+ }
+
+
+ @Ignore
+ @Path("/root")
+ public static class Resource {
+ private static final Logger LOG1 = LogUtils.getL7dLogger(Resource.class);
+ private static final Logger LOG2 = LogUtils.getL7dLogger(Resource.class, null, "namedLogger");
+
+ @GET
+ @Path("/log")
+ public void doLogging() {
+ doLog(LOG1, LOG2);
+ }
+
+ }
+
+
+ private static void doLog(Logger l1, Logger l2) {
+ l1.severe("severe message");
+ l1.warning("warning message");
+ l1.info("info message");
+ LogRecord r = new LogRecord(Level.FINE, "fine message");
+ r.setThrown(new IllegalArgumentException("tadaam"));
+ l1.log(r);
+ r = new LogRecord(Level.FINER, "finer message with {0} and {1}");
+ r.setParameters(new Object[] {
+ "param1", "param2"
+ });
+ r.setLoggerName("faky-logger");
+ l1.log(r);
+ l1.finest("finest message");
+
+ // for LOG2 only 'warning' and above messages should be logged
+ l2.severe("severe message");
+ l2.severe("severe message2");
+ l2.info("info message - should not pass!");
+ l2.finer("finer message - should not pass!");
+ }
+
+ private org.apache.cxf.jaxrs.ext.logging.LogRecord readLogRecord(String value) throws Exception {
+ return (org.apache.cxf.jaxrs.ext.logging.LogRecord)
+ context.createUnmarshaller().unmarshal(new StringReader(value));
+ }
+
+
+ private void updateCounters(org.apache.cxf.jaxrs.ext.logging.LogRecord record, String clsName) {
+ String name = record.getLoggerName();
+ if (name != null && name.length() > 0) {
+ if (("org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$" + clsName).equals(name)) {
+ resourceLogger++;
+ } else if ("namedLogger".equals(name)) {
+ namedLogger++;
+ } else if ("faky-logger".equals(name)) {
+ fakyLogger++;
+ }
+ } else {
+ assertNotNull(record.getThrowable());
+ throwables++;
+ }
+ }
+
+ private void resetCounters() {
+ fakyLogger = 0;
+ namedLogger = 0;
+ resourceLogger = 0;
+ throwables = 0;
+ }
+
+ private void verifyCounters() {
+ assertEquals(1, throwables);
+ assertEquals(4, resourceLogger);
+ assertEquals(2, namedLogger);
+ assertEquals(1, fakyLogger);
+ }
+}
Propchange: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPullSpringTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml?rev=894615&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml (added)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml Wed Dec 30 14:05:41 2009
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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.
+ -->
+ <!-- START SNIPPET: beans -->
+ <!--
+ beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:simple="http://cxf.apache.org/simple" xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd"
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="
+http://www.springframework.org/schema/beans
+http://www.springframework.org/schema/beans/spring-beans.xsd
+http://cxf.apache.org/jaxrs
+http://cxf.apache.org/schemas/jaxrs.xsd
+http://www.springframework.org/schema/util
+http://www.springframework.org/schema/util/spring-util-2.0.xsd">
+
+ <import resource="classpath:META-INF/cxf/cxf.xml" />
+ <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
+ <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
+
+ <bean id = "atomPullServer" class="org.apache.cxf.jaxrs.ext.logging.atom.AtomPullServer"
+ init-method="init">
+ <property name="loggers"
+ value="
+ org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$Resource:ALL,
+ namedLogger:WARN" />
+ </bean>
+
+ <bean id="feed" class="org.apache.cxf.jaxrs.provider.AtomFeedProvider">
+ <property name="formattedOutput" value="true"/>
+ </bean>
+
+ <jaxrs:server id="resourceServer" address="/resource">
+ <jaxrs:serviceBeans>
+ <bean class="org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$Resource"/>
+ </jaxrs:serviceBeans>
+ <jaxrs:providers>
+ <ref bean="feed" />
+ </jaxrs:providers>
+ </jaxrs:server>
+
+
+ <jaxrs:server id="atomServer" address="/atom">
+ <jaxrs:serviceBeans>
+ <ref bean="atomPullServer"/>
+ </jaxrs:serviceBeans>
+ <jaxrs:providers>
+ <ref bean="feed" />
+ </jaxrs:providers>
+ </jaxrs:server>
+
+</beans>
+<!-- END SNIPPET: beans -->
+
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/beans.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml?rev=894615&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml (added)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml Wed Dec 30 14:05:41 2009
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE web-app
+ PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd">
+<!--
+ 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.
+-->
+<!-- START SNIPPET: webxml -->
+<web-app>
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>WEB-INF/beans.xml</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>
+ org.springframework.web.context.ContextLoaderListener
+ </listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>CXFServlet</servlet-name>
+ <display-name>CXF Servlet</display-name>
+ <servlet-class>
+ org.apache.cxf.transport.servlet.CXFServlet
+ </servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>CXFServlet</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+
+</web-app>
+<!-- END SNIPPET: webxml -->
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_logging_atompull/WEB-INF/web.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml