@Override public <T> T setOption(ResourceOption<T> key, T value) { if (key == HttpResourceAddress.REALMS) return null; return options.setOption(key,value); }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // WSE never should negotiate or support x-kaazing-handshake protocol options.setOption(SUPPORTED_PROTOCOLS, WseResourceAddressFactorySpi.removeStringArrayElement(options.getOption(SUPPORTED_PROTOCOLS), "x-kaazing-handshake")); super.setOptions(address, options, qualifier); }
Object newQualifier = options.getOption(QUALIFIER); if (newQualifier == null) { newQualifier = qualifier; if (options.hasOption(NEXT_PROTOCOL)) { address.setOption0(NEXT_PROTOCOL, options.getOption(NEXT_PROTOCOL)); if (options.hasOption(TRANSPORT_URI)) { address.setOption0(TRANSPORT_URI, options.getOption(TRANSPORT_URI)); if (options.hasOption(TRANSPORT)) { address.setOption0(TRANSPORT, options.getOption(TRANSPORT)); if (options.hasOption(ALTERNATE)) { address.setOption0(ALTERNATE, options.getOption(ALTERNATE)); if (options.hasOption(RESOLVER)) { address.setOption0(RESOLVER, options.getOption(RESOLVER)); if (options.hasOption(BIND_ALTERNATE)) { address.setOption0(BIND_ALTERNATE, options.getOption(BIND_ALTERNATE)); if (options.hasOption(TRANSPORTED_URI)) { address.setOption0(TRANSPORTED_URI, options.getOption(TRANSPORTED_URI)); if (options.hasOption(IDENTITY_RESOLVER)) { address.setOption0(IDENTITY_RESOLVER, options.getOption(IDENTITY_RESOLVER)); if (qualifier != null || options.hasOption(QUALIFIER)) {
@Override public <T> T getOption(ResourceOption<T> key) { if (key == HttpResourceAddress.REALMS) return null; return options.getOption(key); }
@Override public <T> boolean hasOption(ResourceOption<T> key) { if (key == HttpResourceAddress.REALMS) return false; return options.hasOption(key); } }
@Override protected void setOptions(SslResourceAddress address, ResourceOptions options, Object qualifier) { super.setOptions(address, options, qualifier); address.setOption0(CIPHERS, options.getOption(CIPHERS)); address.setOption0(ENCRYPTION_ENABLED, options.getOption(ENCRYPTION_ENABLED)); address.setOption0(WANT_CLIENT_AUTH, options.getOption(WANT_CLIENT_AUTH)); address.setOption0(NEED_CLIENT_AUTH, options.getOption(NEED_CLIENT_AUTH)); address.setOption0(KEY_SELECTOR, options.getOption(KEY_SELECTOR)); address.setOption0(PROTOCOLS, options.getOption(PROTOCOLS)); }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // Extended websocket sessions do not have a codec, by design. options.setOption(CODEC_REQUIRED, Boolean.FALSE); super.setOptions(address, options, qualifier); }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // WSE never should negotiate or support x-kaazing-handshake protocol options.setOption(SUPPORTED_PROTOCOLS, removeStringArrayElement(options.getOption(SUPPORTED_PROTOCOLS), "x-kaazing-handshake")); super.setOptions(address, options, qualifier); }
/** * These options are removed and set in {@link #parseNamedOptions(java.net.URI, ResourceOptions, java.util.Map } * above, so we need to include them in the new options by name map used for alternate construction. */ @SuppressWarnings("JavadocReference") protected Map<String, Object> getNewOptionsByName(ResourceOptions options, Map<String, Object> optionsByName) { Map<String,Object> clonedOptionsByName = new HashMap<>(optionsByName); clonedOptionsByName.put(NEXT_PROTOCOL.name(), options.getOption(NEXT_PROTOCOL)); clonedOptionsByName.put(QUALIFIER.name(), options.getOption(QUALIFIER)); clonedOptionsByName.put(TRANSPORT_URI.name(), options.getOption(TRANSPORT_URI)); clonedOptionsByName.put(BIND_ALTERNATE.name(), options.getOption(BIND_ALTERNATE)); clonedOptionsByName.put(RESOLVER.name(), options.getOption(RESOLVER)); return clonedOptionsByName; }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // No codec for extended websocket sessions by design. options.setOption(WsResourceAddress.CODEC_REQUIRED, Boolean.FALSE); super.setOptions(address, options, qualifier); }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // WsAcceptor will handle this options.setOption(BIND_ALTERNATE, Boolean.FALSE); super.setOptions(address, options, qualifier); // Mid-level websocket sessions are lightweight in the sense they // pass up decoded message payload and pass down encoded message payload. if ( "x-kaazing-handshake".equals(address.getOption(ResourceAddress.NEXT_PROTOCOL)) ) { options.setOption(WsResourceAddress.LIGHTWEIGHT, Boolean.TRUE); } address.setOption0(CODEC_REQUIRED, options.getOption(CODEC_REQUIRED)); address.setOption0(LIGHTWEIGHT, options.getOption(LIGHTWEIGHT)); address.setOption0(MAX_MESSAGE_SIZE, options.getOption(MAX_MESSAGE_SIZE)); address.setOption0(INACTIVITY_TIMEOUT, options.getOption(INACTIVITY_TIMEOUT)); address.setOption0(SUPPORTED_PROTOCOLS, options.getOption(SUPPORTED_PROTOCOLS)); address.setOption0(REQUIRED_PROTOCOLS, options.getOption(REQUIRED_PROTOCOLS)); } }
@Override protected void setOptions(TcpResourceAddress address, ResourceOptions options, Object qualifier) { super.setOptions(address, options, qualifier); address.setOption0(BIND_ADDRESS, options.getOption(BIND_ADDRESS)); address.setOption0(MAXIMUM_OUTBOUND_RATE, options.getOption(MAXIMUM_OUTBOUND_RATE)); address.setOption0(REALM, options.getOption(REALM)); address.setOption0(LOGIN_CONTEXT_FACTORY, options.getOption(LOGIN_CONTEXT_FACTORY)); }
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // No codec for extended websocket sessions by design. options.setOption(CODEC_REQUIRED, Boolean.FALSE); super.setOptions(address, options, qualifier); }
private void setOptions(T address, String location, ResourceOptions options, Object qualifier) { // default the transport ResourceAddress transport = options.getOption(TRANSPORT); String transportURI = options.getOption(TRANSPORT_URI); if (transport == null && addressFactory != null) { ResourceOptions newOptions = ResourceOptions.FACTORY.newResourceOptions(options); if (transportURI == null) { ResourceFactory factory = getTransportFactory(); if (factory != null) { transportURI = factory.createURI(location); newOptions.setOption(TRANSPORT_URI, transportURI); } } if (transportURI != null) { // TODO: make ResourceOptions hierarchical to provide options here? ResourceOptions transportOptions = ResourceOptions.FACTORY.newResourceOptions(); transportOptions.setOption(NEXT_PROTOCOL, getProtocolName()); URI locationURI = URI.create(location); transportOptions.setOption(TRANSPORTED_URI, locationURI); transport = addressFactory.newResourceAddress(transportURI, transportOptions); } newOptions.setOption(TRANSPORT, transport); options = newOptions; } setOptions(address, options, qualifier); }
@Override protected void setOptions(UdpResourceAddress address, ResourceOptions options, Object qualifier) { super.setOptions(address, options, qualifier); // note: no need to propagate bind address and network context, // already handled during address creation address.setOption0(MAXIMUM_OUTBOUND_RATE, options.getOption(MAXIMUM_OUTBOUND_RATE)); address.setOption0(INTERFACE, options.getOption(INTERFACE)); address.setOption0(PADDING_ALIGNMENT, options.getOption(PADDING_ALIGNMENT)); }
@Override public ResourceOptions newResourceOptions(ResourceOptions defaults) { ResourceOptions newOptions = ResourceOptions.FACTORY.newResourceOptions(defaults); newOptions.setOption(NEXT_PROTOCOL, nextProtocol); return newOptions; }
@Override protected void setAlternateOption(final String location, ResourceOptions options, Map<String, Object> optionsByName) { String key = options.getOption(HttpResourceAddress.NEXT_PROTOCOL); String scheme = URIUtils.getScheme(location); final boolean secureScheme = "https".equals(scheme) || scheme.contains("+ssl"); if (key != null && secureScheme) { key = key + " secure"; } List<ResourceFactory> resourceFactories = RESOURCE_FACTORIES_BY_KEY.get(key); if (resourceFactories != null && !resourceFactories.isEmpty() && getResourceAddressFactory() != null) { // create alternate addresses HttpResourceAddress alternateAddress = null; for (ResourceFactory resourceFactory: resourceFactories) { alternateAddress = newResourceAddressWithAlternate( resourceFactory.createURI(location), getNewOptionsByName(options, optionsByName), alternateAddress); } // save the alternate chain into this address. options.setOption(ResourceAddress.ALTERNATE, alternateAddress); } }
address.setOption0(KEEP_ALIVE, options.getOption(KEEP_ALIVE)); address.setOption0(MAXIMUM_REDIRECTS,options.getOption(MAXIMUM_REDIRECTS)); address.setOption0(KEEP_ALIVE_TIMEOUT, options.getOption(KEEP_ALIVE_TIMEOUT)); address.setOption0(KEEP_ALIVE_CONNECTIONS, options.getOption(KEEP_ALIVE_CONNECTIONS)); address.setOption0(REQUIRED_ROLES, options.getOption(REQUIRED_ROLES)); address.setOption0(INJECTABLE_HEADERS, options.getOption(INJECTABLE_HEADERS)); address.setOption0(ORIGIN_SECURITY, options.getOption(ORIGIN_SECURITY)); address.setOption0(TEMP_DIRECTORY, options.getOption(TEMP_DIRECTORY)); address.setOption0(GATEWAY_ORIGIN_SECURITY, options.getOption(GATEWAY_ORIGIN_SECURITY)); address.setOption0(BALANCE_ORIGINS, options.getOption(BALANCE_ORIGINS)); address.setOption0(AUTHENTICATION_CONNECT, options.getOption(AUTHENTICATION_CONNECT)); address.setOption0(AUTHENTICATION_IDENTIFIER, options.getOption(AUTHENTICATION_IDENTIFIER)); address.setOption0(ENCRYPTION_KEY_ALIAS, options.getOption(ENCRYPTION_KEY_ALIAS)); address.setOption0(SERVICE_DOMAIN, options.getOption(SERVICE_DOMAIN)); address.setOption0(SERVER_HEADER_ENABLED, options.getOption(SERVER_HEADER_ENABLED)); address.setOption0(USER_AGENT_HEADER_ENABLED, options.getOption(USER_AGENT_HEADER_ENABLED)); address.setOption0(HOST_HEADER_ENABLED, options.getOption(HOST_HEADER_ENABLED)); address.setOption0(DATE_HEADER_ENABLED, options.getOption(DATE_HEADER_ENABLED)); address.setOption0(MAX_AUTHENTICATION_ATTEMPTS, options.getOption(MAX_AUTHENTICATION_ATTEMPTS)); address.setOption0(REALMS, options.getOption(REALMS)); if (address.getOption(IDENTITY_RESOLVER) == null) { Collection<Class<? extends Principal>> realmUserPrincipalClasses = getUserPrincipalClasses(address.getOption(REALMS));
@Override protected void setOptions(WsResourceAddress address, ResourceOptions options, Object qualifier) { // Extended websocket sessions do not have a codec, by design. options.setOption(CODEC_REQUIRED, Boolean.FALSE); super.setOptions(address, options, qualifier); }
protected abstract T newResourceAddress0(String original, String location);