1 /* 2 * Copyright (c) 1997, 2013, 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 */ 25 26 package com.sun.xml.internal.ws.api.server; 27 28 import com.sun.istack.internal.NotNull; 29 import com.sun.xml.internal.ws.api.pipe.Pipe; 30 import com.sun.xml.internal.ws.api.pipe.ServerPipeAssemblerContext; 31 import com.sun.xml.internal.ws.api.pipe.helper.AbstractFilterPipeImpl; 32 33 /** 34 * Allow the container (primarily Glassfish) to inject 35 * their own pipes into the pipeline. 36 * 37 * <p> 38 * This interface has a rather ad-hoc set of methods, because 39 * we didn't want to define an autonomous pipe-assembly process. 40 * (We thought this is a smaller evil compared to that.) 41 * 42 * <p> 43 * JAX-WS obtains this through {@link Container#getSPI(Class)}. 44 * 45 * @author Kohsuke Kawaguchi 46 */ 47 public abstract class ServerPipelineHook { 48 /** 49 * Called during the pipeline construction process once to allow a container 50 * to register a pipe for monitoring. 51 * 52 * This pipe will be injected to a point very close to the transport, allowing 53 * it to measure the time it takes for processing as well as detecting errors. 54 * 55 * @param ctxt 56 * Represents abstraction of SEI, WSDL abstraction etc. Context can be used 57 * whether add a new pipe to the head or not. 58 * 59 * @param tail 60 * Head of the partially constructed pipeline. If the implementation 61 * wishes to add new pipes, it should do so by extending 62 * {@link AbstractFilterPipeImpl} and making sure that this {@link Pipe} 63 * eventually processes messages. 64 * 65 * @return 66 * The default implementation just returns {@code tail}, which means 67 * no additional pipe is inserted. If the implementation adds 68 * new pipes, return the new head pipe. 69 */ 70 public @NotNull Pipe createMonitoringPipe(ServerPipeAssemblerContext ctxt, @NotNull Pipe tail) { 71 return tail; 72 } 73 74 /** 75 * Called during the pipeline construction process once to allow a container 76 * to register a pipe for security. 77 * 78 * This pipe will be injected to a point very close to the transport, allowing 79 * it to do some security operations. 80 * 81 * @param ctxt 82 * Represents abstraction of SEI, WSDL abstraction etc. Context can be used 83 * whether add a new pipe to the head or not. 84 * 85 * @param tail 86 * Head of the partially constructed pipeline. If the implementation 87 * wishes to add new pipes, it should do so by extending 88 * {@link AbstractFilterPipeImpl} and making sure that this {@link Pipe} 89 * eventually processes messages. 90 * 91 * @return 92 * The default implementation just returns {@code tail}, which means 93 * no additional pipe is inserted. If the implementation adds 94 * new pipes, return the new head pipe. 95 */ 96 public @NotNull Pipe createSecurityPipe(ServerPipeAssemblerContext ctxt, @NotNull Pipe tail) { 97 return tail; 98 } 99 }