src/share/jaxws_classes/com/sun/xml/internal/ws/api/client/ServiceInterceptorFactory.java

Wed, 12 Jun 2013 14:47:09 +0100

author
mkos
date
Wed, 12 Jun 2013 14:47:09 +0100
changeset 384
8f2986ff0235
parent 368
0989ad8c0860
child 637
9c07ef4934dd
permissions
-rw-r--r--

8013021: Rebase 8005432 & 8003542 against the latest jdk8/jaxws
8003542: Improve processing of MTOM attachments
8005432: Update access to JAX-WS
Reviewed-by: mullan

ohair@286 1 /*
alanb@368 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
ohair@286 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ohair@286 4 *
ohair@286 5 * This code is free software; you can redistribute it and/or modify it
ohair@286 6 * under the terms of the GNU General Public License version 2 only, as
ohair@286 7 * published by the Free Software Foundation. Oracle designates this
ohair@286 8 * particular file as subject to the "Classpath" exception as provided
ohair@286 9 * by Oracle in the LICENSE file that accompanied this code.
ohair@286 10 *
ohair@286 11 * This code is distributed in the hope that it will be useful, but WITHOUT
ohair@286 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ohair@286 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ohair@286 14 * version 2 for more details (a copy is included in the LICENSE file that
ohair@286 15 * accompanied this code).
ohair@286 16 *
ohair@286 17 * You should have received a copy of the GNU General Public License version
ohair@286 18 * 2 along with this work; if not, write to the Free Software Foundation,
ohair@286 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ohair@286 20 *
ohair@286 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@286 22 * or visit www.oracle.com if you need additional information or have any
ohair@286 23 * questions.
ohair@286 24 */
ohair@286 25
ohair@286 26 package com.sun.xml.internal.ws.api.client;
ohair@286 27
ohair@286 28 import com.sun.istack.internal.NotNull;
ohair@286 29 import com.sun.istack.internal.Nullable;
ohair@286 30 import com.sun.xml.internal.ws.api.WSService;
ohair@286 31 import com.sun.xml.internal.ws.util.ServiceFinder;
ohair@286 32
ohair@286 33 import javax.xml.ws.Service;
ohair@286 34 import java.util.ArrayList;
ohair@286 35 import java.util.HashSet;
ohair@286 36 import java.util.List;
ohair@286 37 import java.util.Set;
ohair@286 38
ohair@286 39 /**
ohair@286 40 * Creates {@link ServiceInterceptor}.
ohair@286 41 *
ohair@286 42 * <p>
ohair@286 43 * Code that wishes to inject {@link ServiceInterceptor} into {@link WSService}
ohair@286 44 * must implement this class. There are two ways to have the JAX-WS RI
ohair@286 45 * recognize your {@link ServiceInterceptor}s.
ohair@286 46 *
ohair@286 47 * <h3>Use {@link ServiceFinder}</h3>
ohair@286 48 * <p>
ohair@286 49 * {@link ServiceInterceptorFactory}s discovered via {@link ServiceFinder}
ohair@286 50 * will be incorporated to all {@link WSService} instances.
ohair@286 51 *
ohair@286 52 * <h3>Register per-thread</h3>
ohair@286 53 *
ohair@286 54 *
ohair@286 55 * @author Kohsuke Kawaguchi
ohair@286 56 * @see ServiceInterceptor
ohair@286 57 * @see 2.1 EA3
ohair@286 58 */
ohair@286 59 public abstract class ServiceInterceptorFactory {
ohair@286 60 public abstract ServiceInterceptor create(@NotNull WSService service);
ohair@286 61
ohair@286 62 /**
ohair@286 63 * Loads all {@link ServiceInterceptor}s and return aggregated one.
ohair@286 64 */
ohair@286 65 public static @NotNull ServiceInterceptor load(@NotNull WSService service, @Nullable ClassLoader cl) {
ohair@286 66 List<ServiceInterceptor> l = new ArrayList<ServiceInterceptor>();
ohair@286 67
ohair@286 68 // first service look-up
ohair@286 69 for( ServiceInterceptorFactory f : ServiceFinder.find(ServiceInterceptorFactory.class))
ohair@286 70 l.add(f.create(service));
ohair@286 71
ohair@286 72 // then thread-local
ohair@286 73 for( ServiceInterceptorFactory f : threadLocalFactories.get())
ohair@286 74 l.add(f.create(service));
ohair@286 75
ohair@286 76 return ServiceInterceptor.aggregate(l.toArray(new ServiceInterceptor[l.size()]));
ohair@286 77 }
ohair@286 78
ohair@286 79 private static ThreadLocal<Set<ServiceInterceptorFactory>> threadLocalFactories = new ThreadLocal<Set<ServiceInterceptorFactory>>() {
ohair@286 80 protected Set<ServiceInterceptorFactory> initialValue() {
ohair@286 81 return new HashSet<ServiceInterceptorFactory>();
ohair@286 82 }
ohair@286 83 };
ohair@286 84
ohair@286 85 /**
ohair@286 86 * Registers {@link ServiceInterceptorFactory} for this thread.
ohair@286 87 *
ohair@286 88 * <p>
ohair@286 89 * Once registered, {@link ServiceInterceptorFactory}s are consulted for every
ohair@286 90 * {@link Service} created in this thread, until it gets unregistered.
ohair@286 91 */
ohair@286 92 public static boolean registerForThread(ServiceInterceptorFactory factory) {
ohair@286 93 return threadLocalFactories.get().add(factory);
ohair@286 94 }
ohair@286 95
ohair@286 96 /**
ohair@286 97 * Removes previously registered {@link ServiceInterceptorFactory} for this thread.
ohair@286 98 */
ohair@286 99 public static boolean unregisterForThread(ServiceInterceptorFactory factory) {
ohair@286 100 return threadLocalFactories.get().remove(factory);
ohair@286 101 }
ohair@286 102 }

mercurial