WSTCPAdapterRegistryImplpublic final class WSTCPAdapterRegistryImpl extends Object implements com.sun.xml.ws.transport.tcp.server.WSTCPAdapterRegistry
Fields Summary |
---|
private static final Logger | logger | final Map | registryRegistry holds correspondents between service name and adapter | private static final WSTCPAdapterRegistryImpl | instance |
Constructors Summary |
---|
private WSTCPAdapterRegistryImpl()
|
Methods Summary |
---|
private com.sun.xml.ws.transport.tcp.server.TCPAdapter | createWSAdapter(WSEndpointDescriptor wsEndpointDescriptor)
Adapter adapter;
if (wsEndpointDescriptor.isEJB()) {
final EjbRuntimeEndpointInfo ejbEndPtInfo = (EjbRuntimeEndpointInfo) WebServiceEjbEndpointRegistry.getRegistry().
getEjbWebServiceEndpoint(wsEndpointDescriptor.getURI(), "POST", null);
adapter = (Adapter) ejbEndPtInfo.prepareInvocation(true);
} else {
final String uri = wsEndpointDescriptor.getURI();
adapter = JAXWSAdapterRegistry.getInstance().getAdapter(wsEndpointDescriptor.getContextRoot(), uri, uri);
}
//@TODO implement checkAdapterSupportsTCP
// checkAdapterSupportsTCP(adapter);
final TCPAdapter tcpAdapter = new TCP109Adapter(wsEndpointDescriptor.getWSServiceName().toString(),
wsEndpointDescriptor.getContextRoot(),
wsEndpointDescriptor.getUrlPattern(),
adapter.getEndpoint(),
new ServletFakeArtifactSet(wsEndpointDescriptor.getRequestURL(), wsEndpointDescriptor.getUrlPattern()),
wsEndpointDescriptor.isEJB());
return tcpAdapter;
| public void | deleteTargetFor(java.lang.String path)
logger.log(Level.FINE, "WSTCPAdapterRegistryImpl. DeRegister adapter for {0}", path);
registry.remove(path);
| public static com.sun.xml.ws.transport.tcp.server.glassfish.WSTCPAdapterRegistryImpl | getInstance()
return instance;
| public com.sun.xml.ws.transport.tcp.server.TCPAdapter | getTarget(com.sun.xml.ws.transport.tcp.util.WSTCPURI requestURI)
// path should have format like "/context-root/url-pattern", where context-root and url-pattern could be /xxxx/yyyy/zzzz
WSEndpointDescriptor wsEndpointDescriptor = null;
String contextRoot = "/";
String urlPattern = "/";
// check if URI path is not empty
if (requestURI.path.length() > 0 && !requestURI.path.equals("/")) {
// Try to check for most common situation "/context-root/url-pattern"
int nextSlashIndex = requestURI.path.indexOf('/", 1);
if (nextSlashIndex != -1) {
contextRoot = requestURI.path.substring(0, nextSlashIndex);
urlPattern = requestURI.path.substring(nextSlashIndex, requestURI.path.length());
wsEndpointDescriptor = AppServWSRegistry.getInstance().get(contextRoot, urlPattern);
}
if (wsEndpointDescriptor == null) {
// Try to combine different context-root and url-pattern from given path
nextSlashIndex = -1;
do {
nextSlashIndex = requestURI.path.indexOf('/", nextSlashIndex + 1);
int delim = nextSlashIndex != -1 ? nextSlashIndex : requestURI.path.length();
contextRoot = delim > 0 ? requestURI.path.substring(0, delim) : "/";
urlPattern = delim < requestURI.path.length() ? requestURI.path.substring(delim, requestURI.path.length()) : "/";
wsEndpointDescriptor = AppServWSRegistry.getInstance().get(contextRoot, urlPattern);
} while (nextSlashIndex != -1 && wsEndpointDescriptor == null);
}
} else {
wsEndpointDescriptor = AppServWSRegistry.getInstance().get(contextRoot, urlPattern);
}
if (wsEndpointDescriptor != null) {
TCPAdapter adapter = registry.get(requestURI.path);
if (adapter == null) {
try {
adapter = createWSAdapter(wsEndpointDescriptor);
registry.put(requestURI.path, adapter);
logger.log(Level.FINE, "WSTCPAdapterRegistryImpl. Register adapter. Path: {0}", requestURI.path);
} catch (Exception e) {
// This common exception is thrown from ejbEndPtInfo.prepareInvocation(true)
logger.log(Level.SEVERE, "WSTCPAdapterRegistryImpl. " +
MessagesMessages.WSTCP_0008_ERROR_TCP_ADAPTER_CREATE(
wsEndpointDescriptor.getWSServiceName()), e);
}
}
return adapter;
}
return null;
|
|