30 import com.sun.xml.internal.stream.buffer.XMLStreamBuffer; |
30 import com.sun.xml.internal.stream.buffer.XMLStreamBuffer; |
31 import com.sun.xml.internal.ws.addressing.EPRSDDocumentFilter; |
31 import com.sun.xml.internal.ws.addressing.EPRSDDocumentFilter; |
32 import com.sun.xml.internal.ws.addressing.WSEPRExtension; |
32 import com.sun.xml.internal.ws.addressing.WSEPRExtension; |
33 import com.sun.xml.internal.ws.api.Component; |
33 import com.sun.xml.internal.ws.api.Component; |
34 import com.sun.xml.internal.ws.api.ComponentFeature; |
34 import com.sun.xml.internal.ws.api.ComponentFeature; |
|
35 import com.sun.xml.internal.ws.api.ComponentsFeature; |
35 import com.sun.xml.internal.ws.api.SOAPVersion; |
36 import com.sun.xml.internal.ws.api.SOAPVersion; |
36 import com.sun.xml.internal.ws.api.WSBinding; |
37 import com.sun.xml.internal.ws.api.WSBinding; |
37 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; |
38 import com.sun.xml.internal.ws.api.addressing.AddressingVersion; |
38 import com.sun.xml.internal.ws.api.addressing.WSEndpointReference; |
39 import com.sun.xml.internal.ws.api.addressing.WSEndpointReference; |
39 import com.sun.xml.internal.ws.api.message.Message; |
40 import com.sun.xml.internal.ws.api.message.Message; |
40 import com.sun.xml.internal.ws.api.message.Packet; |
41 import com.sun.xml.internal.ws.api.message.Packet; |
41 import com.sun.xml.internal.ws.api.model.SEIModel; |
42 import com.sun.xml.internal.ws.api.model.SEIModel; |
42 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort; |
43 import com.sun.xml.internal.ws.api.model.wsdl.WSDLPort; |
43 import com.sun.xml.internal.ws.api.pipe.Codec; |
44 import com.sun.xml.internal.ws.api.pipe.*; |
44 import com.sun.xml.internal.ws.api.pipe.Engine; |
45 import com.sun.xml.internal.ws.api.server.*; |
45 import com.sun.xml.internal.ws.api.pipe.Fiber; |
|
46 import com.sun.xml.internal.ws.api.pipe.FiberContextSwitchInterceptor; |
|
47 import com.sun.xml.internal.ws.api.pipe.ServerPipeAssemblerContext; |
|
48 import com.sun.xml.internal.ws.api.pipe.ServerTubeAssemblerContext; |
|
49 import com.sun.xml.internal.ws.api.pipe.SyncStartForAsyncFeature; |
|
50 import com.sun.xml.internal.ws.api.pipe.Tube; |
|
51 import com.sun.xml.internal.ws.api.pipe.TubeCloner; |
|
52 import com.sun.xml.internal.ws.api.pipe.TubelineAssembler; |
|
53 import com.sun.xml.internal.ws.api.pipe.TubelineAssemblerFactory; |
|
54 import com.sun.xml.internal.ws.api.server.Container; |
|
55 import com.sun.xml.internal.ws.api.server.EndpointAwareCodec; |
|
56 import com.sun.xml.internal.ws.api.server.EndpointComponent; |
|
57 import com.sun.xml.internal.ws.api.server.EndpointReferenceExtensionContributor; |
|
58 import com.sun.xml.internal.ws.api.server.LazyMOMProvider; |
|
59 import com.sun.xml.internal.ws.api.server.TransportBackChannel; |
|
60 import com.sun.xml.internal.ws.api.server.WSEndpoint; |
|
61 import com.sun.xml.internal.ws.api.server.WebServiceContextDelegate; |
|
62 import com.sun.xml.internal.ws.binding.BindingImpl; |
46 import com.sun.xml.internal.ws.binding.BindingImpl; |
63 import com.sun.xml.internal.ws.fault.SOAPFaultBuilder; |
47 import com.sun.xml.internal.ws.fault.SOAPFaultBuilder; |
64 import com.sun.xml.internal.ws.model.wsdl.WSDLDirectProperties; |
48 import com.sun.xml.internal.ws.model.wsdl.WSDLDirectProperties; |
65 import com.sun.xml.internal.ws.model.wsdl.WSDLPortImpl; |
49 import com.sun.xml.internal.ws.model.wsdl.WSDLPortImpl; |
66 import com.sun.xml.internal.ws.model.wsdl.WSDLPortProperties; |
50 import com.sun.xml.internal.ws.model.wsdl.WSDLPortProperties; |
79 import javax.xml.stream.XMLStreamException; |
63 import javax.xml.stream.XMLStreamException; |
80 import javax.xml.ws.EndpointReference; |
64 import javax.xml.ws.EndpointReference; |
81 import javax.xml.ws.WebServiceException; |
65 import javax.xml.ws.WebServiceException; |
82 import javax.xml.ws.handler.Handler; |
66 import javax.xml.ws.handler.Handler; |
83 import java.lang.reflect.Method; |
67 import java.lang.reflect.Method; |
84 import java.util.Arrays; |
68 import java.util.*; |
85 import java.util.Collection; |
|
86 import java.util.HashMap; |
|
87 import java.util.HashSet; |
|
88 import java.util.Iterator; |
|
89 import java.util.List; |
|
90 import java.util.Map; |
|
91 import java.util.Set; |
|
92 import java.util.concurrent.CopyOnWriteArraySet; |
69 import java.util.concurrent.CopyOnWriteArraySet; |
93 import java.util.concurrent.Executor; |
70 import java.util.concurrent.Executor; |
94 import java.util.logging.Level; |
71 import java.util.logging.Level; |
95 import java.util.logging.Logger; |
72 import java.util.logging.Logger; |
|
73 import javax.management.ObjectName; |
96 |
74 |
97 /** |
75 /** |
98 * {@link WSEndpoint} implementation. |
76 * {@link WSEndpoint} implementation. |
99 * |
77 * |
100 * @author Kohsuke Kawaguchi |
78 * @author Kohsuke Kawaguchi |
101 * @author Jitendra Kotamraju |
79 * @author Jitendra Kotamraju |
102 */ |
80 */ |
103 public /*final*/ class WSEndpointImpl<T> extends WSEndpoint<T> implements LazyMOMProvider.WSEndpointScopeChangeListener { |
81 public /*final*/ class WSEndpointImpl<T> extends WSEndpoint<T> implements LazyMOMProvider.WSEndpointScopeChangeListener { |
104 private static final Logger LOGGER = Logger.getLogger(WSEndpointImpl.class.getName()); |
82 |
|
83 private static final Logger logger = Logger.getLogger(com.sun.xml.internal.ws.util.Constants.LoggingDomain + ".server.endpoint"); |
105 |
84 |
106 private final @NotNull QName serviceName; |
85 private final @NotNull QName serviceName; |
107 private final @NotNull QName portName; |
86 private final @NotNull QName portName; |
108 protected final WSBinding binding; |
87 protected final WSBinding binding; |
109 private final SEIModel seiModel; |
88 private final SEIModel seiModel; |
110 private final @NotNull Container container; |
89 private final @NotNull Container container; |
111 private final WSDLPort port; |
90 private final WSDLPort port; |
112 |
91 |
113 protected final Tube masterTubeline; |
92 protected final Tube masterTubeline; |
114 private final ServiceDefinitionImpl serviceDef; |
93 private final ServiceDefinitionImpl serviceDef; |
115 private final SOAPVersion soapVersion; |
94 private final SOAPVersion soapVersion; |
116 private final Engine engine; |
95 private final Engine engine; |
117 private final @NotNull Codec masterCodec; |
96 private final @NotNull Codec masterCodec; |
118 private final @NotNull PolicyMap endpointPolicy; |
97 private final @NotNull PolicyMap endpointPolicy; |
119 private final Pool<Tube> tubePool; |
98 private final Pool<Tube> tubePool; |
120 private final OperationDispatcher operationDispatcher; |
99 private final OperationDispatcher operationDispatcher; |
121 private @NotNull ManagedObjectManager managedObjectManager; |
100 private @NotNull ManagedObjectManager managedObjectManager; |
122 private boolean managedObjectManagerClosed = false; |
101 private boolean managedObjectManagerClosed = false; |
123 private Object managedObjectManagerLock = new Object(); |
102 private final Object managedObjectManagerLock = new Object(); |
124 private LazyMOMProvider.Scope lazyMOMProviderScope = LazyMOMProvider.Scope.STANDALONE; |
103 private LazyMOMProvider.Scope lazyMOMProviderScope = LazyMOMProvider.Scope.STANDALONE; |
125 private final @NotNull ServerTubeAssemblerContext context; |
104 private final @NotNull ServerTubeAssemblerContext context; |
126 |
105 |
127 private Map<QName, WSEndpointReference.EPRExtension> endpointReferenceExtensions = new HashMap<QName, WSEndpointReference.EPRExtension>(); |
106 private Map<QName, WSEndpointReference.EPRExtension> endpointReferenceExtensions = new HashMap<QName, WSEndpointReference.EPRExtension>(); |
128 /** |
107 /** |
129 * Set to true once we start shutting down this endpoint. |
108 * Set to true once we start shutting down this endpoint. Used to avoid |
130 * Used to avoid running the clean up processing twice. |
109 * running the clean up processing twice. |
131 * |
110 * |
132 * @see #dispose() |
111 * @see #dispose() |
133 */ |
112 */ |
134 private boolean disposed; |
113 private boolean disposed; |
135 |
114 private final Class<T> implementationClass; |
136 private final Class<T> implementationClass; |
115 private final @NotNull |
137 private final @NotNull WSDLProperties wsdlProperties; |
116 WSDLProperties wsdlProperties; |
138 private final Set<Component> componentRegistry = new CopyOnWriteArraySet<Component>(); |
117 private final Set<Component> componentRegistry = new CopyOnWriteArraySet<Component>(); |
139 |
118 |
140 protected WSEndpointImpl(@NotNull QName serviceName, @NotNull QName portName, WSBinding binding, |
119 protected WSEndpointImpl(@NotNull QName serviceName, @NotNull QName portName, WSBinding binding, |
141 Container container, SEIModel seiModel, WSDLPort port, |
120 Container container, SEIModel seiModel, WSDLPort port, |
142 Class<T> implementationClass, |
121 Class<T> implementationClass, |
143 @Nullable ServiceDefinitionImpl serviceDef, |
122 @Nullable ServiceDefinitionImpl serviceDef, |
155 this.endpointPolicy = endpointPolicy; |
134 this.endpointPolicy = endpointPolicy; |
156 |
135 |
157 LazyMOMProvider.INSTANCE.registerEndpoint(this); |
136 LazyMOMProvider.INSTANCE.registerEndpoint(this); |
158 initManagedObjectManager(); |
137 initManagedObjectManager(); |
159 |
138 |
160 if (serviceDef != null) { |
139 if (serviceDef != null) { |
161 serviceDef.setOwner(this); |
140 serviceDef.setOwner(this); |
162 } |
141 } |
163 |
142 |
164 ComponentFeature cf = binding.getFeature(ComponentFeature.class); |
143 ComponentFeature cf = binding.getFeature(ComponentFeature.class); |
165 if (cf != null) { |
144 if (cf != null) { |
166 switch(cf.getTarget()) { |
145 switch (cf.getTarget()) { |
167 case ENDPOINT: |
146 case ENDPOINT: |
168 componentRegistry.add(cf.getComponent()); |
147 componentRegistry.add(cf.getComponent()); |
169 break; |
148 break; |
170 case CONTAINER: |
149 case CONTAINER: |
171 container.getComponents().add(cf.getComponent()); |
150 container.getComponents().add(cf.getComponent()); |
172 default: |
151 break; |
173 throw new IllegalArgumentException(); |
152 default: |
174 } |
153 throw new IllegalArgumentException(); |
175 } |
154 } |
|
155 } |
|
156 ComponentsFeature csf = binding.getFeature(ComponentsFeature.class); |
|
157 if (csf != null) { |
|
158 for (ComponentFeature cfi : csf.getComponentFeatures()) { |
|
159 switch (cfi.getTarget()) { |
|
160 case ENDPOINT: |
|
161 componentRegistry.add(cfi.getComponent()); |
|
162 break; |
|
163 case CONTAINER: |
|
164 container.getComponents().add(cfi.getComponent()); |
|
165 break; |
|
166 default: |
|
167 throw new IllegalArgumentException(); |
|
168 } |
|
169 } |
|
170 } |
176 |
171 |
177 TubelineAssembler assembler = TubelineAssemblerFactory.create( |
172 TubelineAssembler assembler = TubelineAssemblerFactory.create( |
178 Thread.currentThread().getContextClassLoader(), binding.getBindingId(), container); |
173 Thread.currentThread().getContextClassLoader(), binding.getBindingId(), container); |
179 assert assembler != null; |
174 assert assembler != null; |
180 |
175 |
181 this.operationDispatcher = (port == null) ? null : new OperationDispatcher(port, binding, seiModel); |
176 this.operationDispatcher = (port == null) ? null : new OperationDispatcher(port, binding, seiModel); |
182 |
177 |
183 context = createServerTubeAssemblerContext(terminalTube, isSynchronous); |
178 context = createServerTubeAssemblerContext(terminalTube, isSynchronous); |
184 this.masterTubeline = assembler.createServer(context); |
179 this.masterTubeline = assembler.createServer(context); |
185 |
180 |
186 Codec c = context.getCodec(); |
181 Codec c = context.getCodec(); |
187 if (c instanceof EndpointAwareCodec) { |
182 if (c instanceof EndpointAwareCodec) { |
188 // create a copy to avoid sharing the codec between multiple endpoints |
183 // create a copy to avoid sharing the codec between multiple endpoints |
189 c = c.copy(); |
184 c = c.copy(); |
190 ((EndpointAwareCodec) c).setEndpoint(this); |
185 ((EndpointAwareCodec) c).setEndpoint(this); |
191 } |
186 } |
192 this.masterCodec = c; |
187 this.masterCodec = c; |
193 |
188 |
194 tubePool = new TubePool(masterTubeline); |
189 tubePool = new TubePool(masterTubeline); |
195 terminalTube.setEndpoint(this); |
190 terminalTube.setEndpoint(this); |
196 engine = new Engine(toString()); |
191 engine = new Engine(toString(), container); |
197 wsdlProperties = (port == null) ? new WSDLDirectProperties(serviceName, portName, seiModel) : new WSDLPortProperties(port, seiModel); |
192 wsdlProperties = (port == null) ? new WSDLDirectProperties(serviceName, portName, seiModel) : new WSDLPortProperties(port, seiModel); |
198 |
193 |
199 Map<QName, WSEndpointReference.EPRExtension> eprExtensions = new HashMap<QName, WSEndpointReference.EPRExtension>(); |
194 Map<QName, WSEndpointReference.EPRExtension> eprExtensions = new HashMap<QName, WSEndpointReference.EPRExtension>(); |
200 try { |
195 try { |
201 if (port != null) { |
196 if (port != null) { |
202 //gather EPR extrensions from WSDL Model |
197 //gather EPR extrensions from WSDL Model |
311 |
306 |
312 public void schedule(final Packet request, final CompletionCallback callback, FiberContextSwitchInterceptor interceptor) { |
307 public void schedule(final Packet request, final CompletionCallback callback, FiberContextSwitchInterceptor interceptor) { |
313 processAsync(request, callback, interceptor, true); |
308 processAsync(request, callback, interceptor, true); |
314 } |
309 } |
315 |
310 |
316 private void processAsync(final Packet request, final CompletionCallback callback, FiberContextSwitchInterceptor interceptor, boolean schedule) { |
311 private void processAsync(final Packet request, |
317 request.endpoint = WSEndpointImpl.this; |
312 final CompletionCallback callback, |
318 request.addSatellite(wsdlProperties); |
313 FiberContextSwitchInterceptor interceptor, boolean schedule) { |
319 |
314 Container old = ContainerResolver.getDefault().enterContainer(container); |
320 Fiber fiber = engine.createFiber(); |
315 try { |
321 if (interceptor != null) { |
316 request.endpoint = WSEndpointImpl.this; |
322 fiber.addInterceptor(interceptor); |
317 request.addSatellite(wsdlProperties); |
323 } |
318 |
324 final Tube tube = tubePool.take(); |
319 Fiber fiber = engine.createFiber(); |
325 Fiber.CompletionCallback cbak = new Fiber.CompletionCallback() { |
320 fiber.setDeliverThrowableInPacket(true); |
326 public void onCompletion(@NotNull Packet response) { |
321 if (interceptor != null) { |
327 tubePool.recycle(tube); |
322 fiber.addInterceptor(interceptor); |
328 if (callback != null) { |
323 } |
329 callback.onCompletion(response); |
324 final Tube tube = tubePool.take(); |
330 } |
325 Fiber.CompletionCallback cbak = new Fiber.CompletionCallback() { |
|
326 public void onCompletion(@NotNull Packet response) { |
|
327 ThrowableContainerPropertySet tc = response.getSatellite(ThrowableContainerPropertySet.class); |
|
328 if (tc == null) { |
|
329 // Only recycle tubes in non-exception path as some Tubes may be |
|
330 // in invalid state following exception |
|
331 tubePool.recycle(tube); |
|
332 } |
|
333 |
|
334 if (callback != null) { |
|
335 if (tc != null) { |
|
336 response = createServiceResponseForException(tc, |
|
337 response, |
|
338 soapVersion, |
|
339 request.endpoint.getPort(), |
|
340 null, |
|
341 request.endpoint.getBinding()); |
331 } |
342 } |
332 |
343 callback.onCompletion(response); |
333 public void onCompletion(@NotNull Throwable error) { |
344 } |
334 // let's not reuse tubes as they might be in a wrong state, so not |
345 } |
335 // calling tubePool.recycle() |
346 |
336 // Convert all runtime exceptions to Packet so that transport doesn't |
347 public void onCompletion(@NotNull Throwable error) { |
337 // have to worry about converting to wire message |
348 // will never be called now that we are using |
338 // TODO XML/HTTP binding |
349 // fiber.setDeliverThrowableInPacket(true); |
339 Message faultMsg = SOAPFaultBuilder.createSOAPFaultMessage( |
350 throw new IllegalStateException(); |
340 soapVersion, null, error); |
351 } |
341 Packet response = request.createServerResponse(faultMsg, request.endpoint.getPort(), null, |
352 }; |
342 request.endpoint.getBinding()); |
353 |
343 if (callback != null) { |
354 fiber.start(tube, request, cbak, |
344 callback.onCompletion(response); |
355 binding.isFeatureEnabled(SyncStartForAsyncFeature.class) |
345 } |
356 || !schedule); |
346 } |
357 } finally { |
347 }; |
358 ContainerResolver.getDefault().exitContainer(old); |
348 |
359 } |
349 fiber.start(tube, request, cbak, |
360 } |
350 binding.isFeatureEnabled(SyncStartForAsyncFeature.class) || !schedule); |
361 |
351 } |
362 @Override |
|
363 public Packet createServiceResponseForException(final ThrowableContainerPropertySet tc, |
|
364 final Packet responsePacket, |
|
365 final SOAPVersion soapVersion, |
|
366 final WSDLPort wsdlPort, |
|
367 final SEIModel seiModel, |
|
368 final WSBinding binding) |
|
369 { |
|
370 // This will happen in addressing if it is enabled. |
|
371 if (tc.isFaultCreated()) return responsePacket; |
|
372 |
|
373 final Message faultMessage = SOAPFaultBuilder.createSOAPFaultMessage(soapVersion, null, tc.getThrowable()); |
|
374 final Packet result = responsePacket.createServerResponse(faultMessage, wsdlPort, seiModel, binding); |
|
375 // Pass info to upper layers |
|
376 tc.setFaultMessage(faultMessage); |
|
377 tc.setResponsePacket(responsePacket); |
|
378 tc.setFaultCreated(true); |
|
379 return result; |
|
380 } |
352 |
381 |
353 @Override |
382 @Override |
354 public void process(final Packet request, final CompletionCallback callback, FiberContextSwitchInterceptor interceptor) { |
383 public void process(final Packet request, final CompletionCallback callback, FiberContextSwitchInterceptor interceptor) { |
355 processAsync(request, callback, interceptor, false); |
384 processAsync(request, callback, interceptor, false); |
356 } |
385 } |
357 |
386 |
358 public @NotNull PipeHead createPipeHead() { |
387 public @NotNull |
359 return new PipeHead() { |
388 PipeHead createPipeHead() { |
360 private final Tube tube = TubeCloner.clone(masterTubeline); |
389 return new PipeHead() { |
361 |
390 private final Tube tube = TubeCloner.clone(masterTubeline); |
362 public @NotNull Packet process(Packet request, WebServiceContextDelegate wscd, TransportBackChannel tbc) { |
391 |
363 request.webServiceContextDelegate = wscd; |
392 public @NotNull |
364 request.transportBackChannel = tbc; |
393 Packet process(Packet request, WebServiceContextDelegate wscd, |
365 request.endpoint = WSEndpointImpl.this; |
394 TransportBackChannel tbc) { |
366 request.addSatellite(wsdlProperties); |
395 Container old = ContainerResolver.getDefault().enterContainer(container); |
367 |
396 try { |
368 Fiber fiber = engine.createFiber(); |
397 request.webServiceContextDelegate = wscd; |
369 Packet response; |
398 request.transportBackChannel = tbc; |
370 try { |
399 request.endpoint = WSEndpointImpl.this; |
371 response = fiber.runSync(tube, request); |
400 request.addSatellite(wsdlProperties); |
372 } catch (RuntimeException re) { |
401 |
373 // Catch all runtime exceptions so that transport doesn't |
402 Fiber fiber = engine.createFiber(); |
374 // have to worry about converting to wire message |
403 Packet response; |
375 // TODO XML/HTTP binding |
404 try { |
376 Message faultMsg = SOAPFaultBuilder.createSOAPFaultMessage( |
405 response = fiber.runSync(tube, request); |
377 soapVersion, null, re); |
406 } catch (RuntimeException re) { |
378 response = request.createServerResponse(faultMsg, request.endpoint.getPort(), null, request.endpoint.getBinding()); |
407 // Catch all runtime exceptions so that transport |
379 } |
408 // doesn't |
380 return response; |
409 // have to worry about converting to wire message |
381 } |
410 // TODO XML/HTTP binding |
382 }; |
411 Message faultMsg = SOAPFaultBuilder |
383 } |
412 .createSOAPFaultMessage(soapVersion, null, re); |
|
413 response = request.createServerResponse(faultMsg, |
|
414 request.endpoint.getPort(), null, |
|
415 request.endpoint.getBinding()); |
|
416 } |
|
417 return response; |
|
418 } finally { |
|
419 ContainerResolver.getDefault().exitContainer(old); |
|
420 } |
|
421 } |
|
422 }; |
|
423 } |
384 |
424 |
385 public synchronized void dispose() { |
425 public synchronized void dispose() { |
386 if (disposed) |
426 if (disposed) { |
387 return; |
427 return; |
388 disposed = true; |
428 } |
389 |
429 disposed = true; |
390 masterTubeline.preDestroy(); |
430 |
391 |
431 masterTubeline.preDestroy(); |
392 for (Handler handler : binding.getHandlerChain()) { |
432 |
393 for (Method method : handler.getClass().getMethods()) { |
433 for (Handler handler : binding.getHandlerChain()) { |
394 if (method.getAnnotation(PreDestroy.class) == null) { |
434 for (Method method : handler.getClass().getMethods()) { |
395 continue; |
435 if (method.getAnnotation(PreDestroy.class) == null) { |
396 } |
436 continue; |
397 try { |
437 } |
398 method.invoke(handler); |
438 try { |
399 } catch (Exception e) { |
439 method.invoke(handler); |
400 logger.log(Level.WARNING, HandlerMessages.HANDLER_PREDESTROY_IGNORE(e.getMessage()), e); |
440 } catch (Exception e) { |
401 } |
441 logger.log(Level.WARNING, HandlerMessages.HANDLER_PREDESTROY_IGNORE(e.getMessage()), e); |
402 break; |
442 } |
403 } |
443 break; |
404 } |
444 } |
405 closeManagedObjectManager(); |
445 } |
|
446 closeManagedObjectManager(); |
|
447 LazyMOMProvider.INSTANCE.unregisterEndpoint(this); |
406 } |
448 } |
407 |
449 |
408 public ServiceDefinitionImpl getServiceDefinition() { |
450 public ServiceDefinitionImpl getServiceDefinition() { |
409 return serviceDef; |
451 return serviceDef; |
410 } |
452 } |
512 public boolean equals(Object obj) { |
554 public boolean equals(Object obj) { |
513 return component.equals(obj); |
555 return component.equals(obj); |
514 } |
556 } |
515 } |
557 } |
516 |
558 |
|
559 @Override |
517 public @NotNull Set<Component> getComponents() { |
560 public @NotNull Set<Component> getComponents() { |
518 return componentRegistry; |
561 return componentRegistry; |
519 } |
562 } |
520 |
563 |
521 private static final Logger logger = Logger.getLogger( |
564 public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, String address, String wsdlAddress, Element... referenceParameters) { |
522 com.sun.xml.internal.ws.util.Constants.LoggingDomain + ".server.endpoint"); |
|
523 |
|
524 public <T extends EndpointReference> T getEndpointReference(Class<T> |
|
525 clazz, String address, String wsdlAddress, Element... referenceParameters) { |
|
526 List<Element> refParams = null; |
565 List<Element> refParams = null; |
527 if (referenceParameters != null) { |
566 if (referenceParameters != null) { |
528 refParams = Arrays.asList(referenceParameters); |
567 refParams = Arrays.asList(referenceParameters); |
529 } |
568 } |
530 return getEndpointReference(clazz, address, wsdlAddress, null, refParams); |
569 return getEndpointReference(clazz, address, wsdlAddress, null, refParams); |
531 } |
570 } |
|
571 |
532 public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, |
572 public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, |
533 String address, String wsdlAddress, List<Element> metadata, |
573 String address, String wsdlAddress, List<Element> metadata, |
534 List<Element> referenceParameters) { |
574 List<Element> referenceParameters) { |
535 QName portType = null; |
575 QName portType = null; |
536 if (port != null) { |
576 if (port != null) { |
537 portType = port.getBinding().getPortTypeName(); |
577 portType = port.getBinding().getPortTypeName(); |
538 } |
578 } |
539 |
579 |
540 AddressingVersion av = AddressingVersion.fromSpecClass(clazz); |
580 AddressingVersion av = AddressingVersion.fromSpecClass(clazz); |
541 return new WSEndpointReference( |
581 return new WSEndpointReference( |
542 av, address, serviceName, portName, portType, metadata, wsdlAddress, referenceParameters,endpointReferenceExtensions.values(), null).toSpec(clazz); |
582 av, address, serviceName, portName, portType, metadata, wsdlAddress, referenceParameters, endpointReferenceExtensions.values(), null).toSpec(clazz); |
543 |
583 |
544 } |
584 } |
545 |
585 |
546 public @NotNull QName getPortName() { |
586 public @NotNull QName getPortName() { |
547 return portName; |
587 return portName; |
548 } |
588 } |
549 |
589 |