Sun, 15 Dec 2013 23:35:45 +0100
8025152: Enhance activation set up
8028388: 9 jaxws tests failed in nightly build with java.lang.ClassCastException
Summary: fix also reviewed by Bill Shannon, Alexander Fomin
Reviewed-by: dfuchs, hawtin, mgrebac
Contributed-by: bill.shannon@oracle.com
1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.xml.internal.ws.dump;
28 import com.sun.xml.internal.ws.api.message.Packet;
29 import com.sun.xml.internal.ws.api.pipe.Fiber;
30 import com.sun.xml.internal.ws.api.pipe.NextAction;
31 import com.sun.xml.internal.ws.api.pipe.Tube;
32 import com.sun.xml.internal.ws.api.pipe.TubeCloner;
33 import com.sun.xml.internal.ws.api.pipe.helper.AbstractFilterTubeImpl;
34 import com.sun.xml.internal.ws.commons.xmlutil.Converter;
35 import com.sun.xml.internal.ws.dump.MessageDumper.ProcessingState;
37 import java.util.concurrent.atomic.AtomicInteger;
38 import java.util.logging.Level;
39 import java.util.logging.Logger;
41 /**
42 *
43 * @author Marek Potociar <marek.potociar at sun.com>
44 */
45 public class LoggingDumpTube extends AbstractFilterTubeImpl {
46 public static enum Position {
47 Before(MessageDumper.ProcessingState.Received, MessageDumper.ProcessingState.Processed),
48 After(MessageDumper.ProcessingState.Processed, MessageDumper.ProcessingState.Received);
50 private final MessageDumper.ProcessingState requestState;
51 private final MessageDumper.ProcessingState responseState;
53 private Position(ProcessingState requestState, ProcessingState responseState) {
54 this.requestState = requestState;
55 this.responseState = responseState;
56 }
57 }
59 private static final AtomicInteger ID_GENERATOR = new AtomicInteger(0);
60 //
61 private MessageDumper messageDumper;
62 private final Level loggingLevel;
63 private final Position position;
64 private final int tubeId;
66 public LoggingDumpTube(Level loggingLevel, Position position, Tube tubelineHead) {
67 super(tubelineHead);
69 this.position = position;
70 this.loggingLevel = loggingLevel;
72 this.tubeId = ID_GENERATOR.incrementAndGet();
73 }
75 public void setLoggedTubeName(String loggedTubeName) {
76 assert messageDumper == null; // must not set a new message dumper once already set
77 this.messageDumper = new MessageDumper(loggedTubeName, Logger.getLogger(loggedTubeName), loggingLevel);
78 }
80 /**
81 * Copy constructor.
82 */
83 private LoggingDumpTube(LoggingDumpTube original, TubeCloner cloner) {
84 super(original, cloner);
86 this.messageDumper = original.messageDumper;
87 this.loggingLevel = original.loggingLevel;
88 this.position = original.position;
90 this.tubeId = ID_GENERATOR.incrementAndGet();
91 }
93 public LoggingDumpTube copy(TubeCloner cloner) {
94 return new LoggingDumpTube(this, cloner);
95 }
98 @Override
99 public NextAction processRequest(Packet request) {
100 if (messageDumper.isLoggable()) {
101 Packet dumpPacket = (request != null) ? request.copy(true) : null;
102 messageDumper.dump(MessageDumper.MessageType.Request, position.requestState, Converter.toString(dumpPacket), tubeId, Fiber.current().owner.id);
103 }
105 return super.processRequest(request);
106 }
108 @Override
109 public NextAction processResponse(Packet response) {
110 if (messageDumper.isLoggable()) {
111 Packet dumpPacket = (response != null) ? response.copy(true) : null;
112 messageDumper.dump(MessageDumper.MessageType.Response, position.responseState, Converter.toString(dumpPacket), tubeId, Fiber.current().owner.id);
113 }
115 return super.processResponse(response);
116 }
118 @Override
119 public NextAction processException(Throwable t) {
120 if (messageDumper.isLoggable()) {
121 messageDumper.dump(MessageDumper.MessageType.Exception, position.responseState, Converter.toString(t), tubeId, Fiber.current().owner.id);
122 }
124 return super.processException(t);
125 }
127 @Override
128 public void preDestroy() {
129 super.preDestroy();
130 }
131 }