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 26package com.sun.xml.internal.ws.server; 27 28import com.sun.istack.internal.NotNull; 29import com.sun.xml.internal.ws.api.SOAPVersion; 30import com.sun.xml.internal.ws.api.WSBinding; 31import com.sun.xml.internal.ws.api.message.Packet; 32import com.sun.xml.internal.ws.api.model.SEIModel; 33import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort; 34import com.sun.xml.internal.ws.api.pipe.Codec; 35import com.sun.xml.internal.ws.api.pipe.FiberContextSwitchInterceptor; 36import com.sun.xml.internal.ws.api.pipe.ServerTubeAssemblerContext; 37import com.sun.xml.internal.ws.api.pipe.ThrowableContainerPropertySet; 38import com.sun.xml.internal.ws.api.server.Container; 39import com.sun.xml.internal.ws.api.server.ServiceDefinition; 40import com.sun.xml.internal.ws.api.server.WSEndpoint; 41import com.sun.xml.internal.ws.policy.PolicyMap; 42import com.sun.xml.internal.ws.wsdl.OperationDispatcher; 43import com.sun.org.glassfish.gmbal.AMXClient; 44import com.sun.org.glassfish.gmbal.GmbalMBean; 45import com.sun.org.glassfish.gmbal.ManagedObjectManager; 46 47import javax.management.MBeanServer; 48import javax.management.ObjectName; 49import java.io.IOException; 50import java.lang.annotation.Annotation; 51import java.lang.reflect.AnnotatedElement; 52import java.util.List; 53import java.util.ResourceBundle; 54import java.util.Set; 55import java.util.concurrent.Executor; 56import javax.xml.namespace.QName; 57import javax.xml.ws.EndpointReference; 58import org.w3c.dom.Element; 59 60/** 61 * {@link ManagedObjectManager} proxy class for {@link WSEndpointImpl} instances that could be used when Gmbal API calls 62 * need to be deferred. The proxy tries to defer a need of a real ManagedObjectManager instance to the time when any 63 * method from {@link ManagedObjectManager} is invoked on it. In this case a real instance of ManagedObjectManager is 64 * obtained from WSEndpointImpl and the method is rather invoked on this object. 65 */ 66public class WSEndpointMOMProxy extends WSEndpoint implements ManagedObjectManager { 67 68 private final @NotNull 69 WSEndpointImpl wsEndpoint; 70 private ManagedObjectManager managedObjectManager; 71 72 WSEndpointMOMProxy(@NotNull WSEndpointImpl wsEndpoint) { 73 this.wsEndpoint = wsEndpoint; 74 } 75 76 /** 77 * Returns a real instance of {@link ManagedObjectManager} 78 * 79 * @return an ManagedObjectManager instance 80 */ 81 @Override 82 public ManagedObjectManager getManagedObjectManager() { 83 if (managedObjectManager == null) { 84 managedObjectManager = wsEndpoint.obtainManagedObjectManager(); 85 } 86 return managedObjectManager; 87 } 88 89 void setManagedObjectManager(ManagedObjectManager managedObjectManager) { 90 this.managedObjectManager = managedObjectManager; 91 } 92 93 /** 94 * Returns {@code true} if this proxy contains a reference to real ManagedObjectManager instance, {@code false} 95 * otherwise. 96 * 97 * @return {@code true} if ManagedObjectManager has been created, {@code false} otherwise. 98 */ 99 public boolean isInitialized() { 100 return this.managedObjectManager != null; 101 } 102 103 public WSEndpointImpl getWsEndpoint() { 104 return wsEndpoint; 105 } 106 107 @Override 108 public void suspendJMXRegistration() { 109 getManagedObjectManager().suspendJMXRegistration(); 110 } 111 112 @Override 113 public void resumeJMXRegistration() { 114 getManagedObjectManager().resumeJMXRegistration(); 115 } 116 117 @Override 118 public boolean isManagedObject(Object obj) { 119 return getManagedObjectManager().isManagedObject(obj); 120 } 121 122 @Override 123 public GmbalMBean createRoot() { 124 return getManagedObjectManager().createRoot(); 125 } 126 127 @Override 128 public GmbalMBean createRoot(Object root) { 129 return getManagedObjectManager().createRoot(root); 130 } 131 132 @Override 133 public GmbalMBean createRoot(Object root, String name) { 134 return getManagedObjectManager().createRoot(root, name); 135 } 136 137 @Override 138 public Object getRoot() { 139 return getManagedObjectManager().getRoot(); 140 } 141 142 @Override 143 public GmbalMBean register(Object parent, Object obj, String name) { 144 return getManagedObjectManager().register(parent, obj, name); 145 } 146 147 @Override 148 public GmbalMBean register(Object parent, Object obj) { 149 return getManagedObjectManager().register(parent, obj); 150 } 151 152 @Override 153 public GmbalMBean registerAtRoot(Object obj, String name) { 154 return getManagedObjectManager().registerAtRoot(obj, name); 155 } 156 157 @Override 158 public GmbalMBean registerAtRoot(Object obj) { 159 return getManagedObjectManager().registerAtRoot(obj); 160 } 161 162 @Override 163 public void unregister(Object obj) { 164 getManagedObjectManager().unregister(obj); 165 } 166 167 @Override 168 public ObjectName getObjectName(Object obj) { 169 return getManagedObjectManager().getObjectName(obj); 170 } 171 172 @Override 173 public AMXClient getAMXClient(Object obj) { 174 return getManagedObjectManager().getAMXClient(obj); 175 } 176 177 @Override 178 public Object getObject(ObjectName oname) { 179 return getManagedObjectManager().getObject(oname); 180 } 181 182 @Override 183 public void stripPrefix(String... str) { 184 getManagedObjectManager().stripPrefix(str); 185 } 186 187 @Override 188 public void stripPackagePrefix() { 189 getManagedObjectManager().stripPackagePrefix(); 190 } 191 192 @Override 193 public String getDomain() { 194 return getManagedObjectManager().getDomain(); 195 } 196 197 @Override 198 public void setMBeanServer(MBeanServer server) { 199 getManagedObjectManager().setMBeanServer(server); 200 } 201 202 @Override 203 public MBeanServer getMBeanServer() { 204 return getManagedObjectManager().getMBeanServer(); 205 } 206 207 @Override 208 public void setResourceBundle(ResourceBundle rb) { 209 getManagedObjectManager().setResourceBundle(rb); 210 } 211 212 @Override 213 public ResourceBundle getResourceBundle() { 214 return getManagedObjectManager().getResourceBundle(); 215 } 216 217 @Override 218 public void addAnnotation(AnnotatedElement element, Annotation annotation) { 219 getManagedObjectManager().addAnnotation(element, annotation); 220 } 221 222 @Override 223 public void setRegistrationDebug(RegistrationDebugLevel level) { 224 getManagedObjectManager().setRegistrationDebug(level); 225 } 226 227 @Override 228 public void setRuntimeDebug(boolean flag) { 229 getManagedObjectManager().setRuntimeDebug(flag); 230 } 231 232 @Override 233 public void setTypelibDebug(int level) { 234 getManagedObjectManager().setTypelibDebug(level); 235 } 236 237 @Override 238 public void setJMXRegistrationDebug(boolean flag) { 239 getManagedObjectManager().setJMXRegistrationDebug(flag); 240 } 241 242 @Override 243 public String dumpSkeleton(Object obj) { 244 return getManagedObjectManager().dumpSkeleton(obj); 245 } 246 247 @Override 248 public void suppressDuplicateRootReport(boolean suppressReport) { 249 getManagedObjectManager().suppressDuplicateRootReport(suppressReport); 250 } 251 252 @Override 253 public void close() throws IOException { 254 getManagedObjectManager().close(); 255 } 256 257 @Override 258 public boolean equalsProxiedInstance(WSEndpoint endpoint) { 259 if (wsEndpoint == null) { 260 return (endpoint == null); 261 } 262 return wsEndpoint.equals(endpoint); 263 } 264 265 @Override 266 public Codec createCodec() { 267 return this.wsEndpoint.createCodec(); 268 } 269 270 @Override 271 public QName getServiceName() { 272 return this.wsEndpoint.getServiceName(); 273 } 274 275 @Override 276 public QName getPortName() { 277 return this.wsEndpoint.getPortName(); 278 } 279 280 @Override 281 public Class getImplementationClass() { 282 return this.wsEndpoint.getImplementationClass(); 283 } 284 285 @Override 286 public WSBinding getBinding() { 287 return this.wsEndpoint.getBinding(); 288 } 289 290 @Override 291 public Container getContainer() { 292 return this.wsEndpoint.getContainer(); 293 } 294 295 @Override 296 public WSDLPort getPort() { 297 return this.wsEndpoint.getPort(); 298 } 299 300 @Override 301 public void setExecutor(Executor exec) { 302 this.wsEndpoint.setExecutor(exec); 303 } 304 305 @Override 306 public void schedule(Packet request, CompletionCallback callback, FiberContextSwitchInterceptor interceptor) { 307 this.wsEndpoint.schedule(request, callback, interceptor); 308 } 309 310 @Override 311 public PipeHead createPipeHead() { 312 return this.wsEndpoint.createPipeHead(); 313 } 314 315 @Override 316 public void dispose() { 317 if (this.wsEndpoint != null) { 318 this.wsEndpoint.dispose(); 319 } 320 } 321 322 @Override 323 public ServiceDefinition getServiceDefinition() { 324 return this.wsEndpoint.getServiceDefinition(); 325 } 326 327 @Override 328 public Set getComponentRegistry() { 329 return this.wsEndpoint.getComponentRegistry(); 330 } 331 332 @Override 333 public SEIModel getSEIModel() { 334 return this.wsEndpoint.getSEIModel(); 335 } 336 337 @Override 338 public PolicyMap getPolicyMap() { 339 return this.wsEndpoint.getPolicyMap(); 340 } 341 342 @Override 343 public void closeManagedObjectManager() { 344 this.wsEndpoint.closeManagedObjectManager(); 345 } 346 347 @Override 348 public ServerTubeAssemblerContext getAssemblerContext() { 349 return this.wsEndpoint.getAssemblerContext(); 350 } 351 352 @Override 353 public EndpointReference getEndpointReference(Class clazz, String address, String wsdlAddress, Element... referenceParameters) { 354 return wsEndpoint.getEndpointReference(clazz, address, wsdlAddress, referenceParameters); 355 } 356 357 @Override 358 public EndpointReference getEndpointReference(Class clazz, String address, String wsdlAddress, List metadata, List referenceParameters) { 359 return wsEndpoint.getEndpointReference(clazz, address, wsdlAddress, metadata, referenceParameters); 360 } 361 362 @Override 363 public OperationDispatcher getOperationDispatcher() { 364 return wsEndpoint.getOperationDispatcher(); 365 } 366 367 @Override 368 public Packet createServiceResponseForException(final ThrowableContainerPropertySet tc, 369 final Packet responsePacket, 370 final SOAPVersion soapVersion, 371 final WSDLPort wsdlPort, 372 final SEIModel seiModel, 373 final WSBinding binding) 374 { 375 return wsEndpoint.createServiceResponseForException(tc, responsePacket, soapVersion, 376 wsdlPort, seiModel, binding); 377 } 378} 379