Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separate Payara's inserters from PR 3844 #4098

Merged
merged 1 commit into from
Apr 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2018 Payara Foundation and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.jersey.client;


import org.glassfish.jersey.internal.BootstrapBag;
import org.glassfish.jersey.client.inject.ParameterInserterProvider;

/**
* {@inheritDoc}
* <p>
* This bootstrap bag is specialized for client part of Jersey.
*
* @author Gaurav Gupta (gaurav.gupta@payara.fish)
*/
public class ClientBootstrapBag extends BootstrapBag {

private ParameterInserterProvider parameterInserterProvider;

public ParameterInserterProvider getParameterInserterProvider() {
requireNonNull(parameterInserterProvider, ParameterInserterProvider.class);
return parameterInserterProvider;
}

public void setParameterInserterProvider(ParameterInserterProvider provider) {
this.parameterInserterProvider = provider;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
Expand Down Expand Up @@ -34,6 +35,7 @@
import org.glassfish.jersey.CommonProperties;
import org.glassfish.jersey.ExtendedConfig;
import org.glassfish.jersey.client.internal.LocalizationMessages;
import org.glassfish.jersey.client.internal.inject.ParameterInserterConfigurator;
import org.glassfish.jersey.client.spi.Connector;
import org.glassfish.jersey.client.spi.ConnectorProvider;
import org.glassfish.jersey.internal.AutoDiscoverableConfigurator;
Expand All @@ -56,6 +58,7 @@
import org.glassfish.jersey.model.internal.ComponentBag;
import org.glassfish.jersey.model.internal.ManagedObjectsFinalizer;
import org.glassfish.jersey.process.internal.RequestScope;
import org.glassfish.jersey.internal.inject.ParamConverterConfigurator;

/**
* Jersey externalized implementation of client-side JAX-RS {@link javax.ws.rs.core.Configurable
Expand All @@ -64,6 +67,7 @@
* @author Marek Potociar (marek.potociar at oracle.com)
* @author Martin Matula
* @author Libor Kramolis (libor.kramolis at oracle.com)
* @author Gaurav Gupta (gaurav.gupta@payara.fish)
*/
public class ClientConfig implements Configurable<ClientConfig>, ExtendedConfig {
/**
Expand Down Expand Up @@ -408,10 +412,11 @@ private ClientRuntime initRuntime() {
InjectionManager injectionManager = Injections.createInjectionManager();
injectionManager.register(new ClientBinder(runtimeCfgState.getProperties()));

BootstrapBag bootstrapBag = new BootstrapBag();
BootstrapBag bootstrapBag = new ClientBootstrapBag();
bootstrapBag.setManagedObjectsFinalizer(new ManagedObjectsFinalizer(injectionManager));
List<BootstrapConfigurator> bootstrapConfigurators = Arrays.asList(
new RequestScope.RequestScopeConfigurator(),
List<BootstrapConfigurator> bootstrapConfigurators = Arrays.asList(new RequestScope.RequestScopeConfigurator(),
new ParamConverterConfigurator(),
new ParameterInserterConfigurator(),
new RuntimeConfigConfigurator(runtimeCfgState),
new ContextResolverFactory.ContextResolversConfigurator(),
new MessageBodyFactory.MessageBodyWorkersConfigurator(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/

package org.glassfish.jersey.client.inject;

/**
* Provider that converts the an object of a custom Java type
* values to String / Collection&lt;String>&gt; type
*
* @param <T> custom Java type
* @param <R> String / Collection&lt;String>&gt; type
*
* @author Paul Sandoz
* @author Marek Potociar (marek.potociar at oracle.com)
* @author Gaurav Gupta (gaurav.gupta@payara.fish)
*/
public interface ParameterInserter<T, R> {

/**
* Name of the parameter to be inserted
*
* @return name of the inserted parameter.
*/
String getName();

/**
* Default value (string) that will be used in case input value is not available.
*
* @return default (back-up) value.
*/
String getDefaultValueString();

/**
* Insert the value using ParamConverter#toString (and using
* the configured {@link #getDefaultValueString() default value})
*
* @param parameters custom Java type instance value.
* @return converted value.
*/
R insert(T parameters);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/

package org.glassfish.jersey.client.inject;

import org.glassfish.jersey.model.Parameter;

/**
* Provider of parameter inserter.
*
* @author Paul Sandoz
* @author Marek Potociar (marek.potociar at oracle.com)
* @author Gaurav Gupta (gaurav.gupta@payara.fish)
*/
public interface ParameterInserterProvider {

/**
* Get the inserter configured to insert value of given {@link Parameter parameter}.
* <p />
* If the default value has been set on the parameter, it will be configured
* in the inserter.
*
* @param parameter client model parameter.
* @return inserter for the method parameter.
*/
ParameterInserter<?, ?> get(Parameter parameter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
/*
* Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018 Payara Foundation and/or its affiliates.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/

package org.glassfish.jersey.client.internal.inject;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.ParamConverter;

import org.glassfish.jersey.internal.inject.InserterException;
import org.glassfish.jersey.internal.util.collection.UnsafeValue;
import org.glassfish.jersey.internal.util.collection.Values;

/**
* Abstract base class for implementing parameter value inserter
* logic supplied using {@link ParamConverter parameter converters}.
*
* @author Paul Sandoz
* @author Marek Potociar (marek.potociar at oracle.com)
* @author Gaurav Gupta (gaurav.gupta@payara.fish)
*/
abstract class AbstractParamValueInserter<T> {

private final ParamConverter<T> paramConverter;
private final String parameterName;
private final String defaultValue;
private final UnsafeValue<String, RuntimeException> convertedDefaultValue;

/**
* Constructor that initializes parameter inserter.
*
* @param converter parameter converter.
* @param parameterName name of the parameter.
* @param defaultValueString default parameter value string.
*/
protected AbstractParamValueInserter(ParamConverter<T> converter, String parameterName, final String defaultValue) {
this.paramConverter = converter;
this.parameterName = parameterName;
this.defaultValue = defaultValue;

if (defaultValue != null) {
this.convertedDefaultValue = Values.lazy(new UnsafeValue<String, RuntimeException>() {
@Override
public String get() throws RuntimeException {
return defaultValue;
}
});

if (!converter.getClass().isAnnotationPresent(ParamConverter.Lazy.class)) {
// ignore return value - executed just for validation reasons
convertedDefaultValue.get();
}
} else {
convertedDefaultValue = null;
}
}

/**
* Get the name of the parameter this inserter belongs to.
*
* @return parameter name.
*/
public String getName() {
return parameterName;
}

/**
* Get the default value of the parameter.
*
* @return default parameter value.
*/
public String getDefaultValueString() {
return defaultValue;
}

/**
* Insert parameter value to string using the configured {@link ParamConverter parameter converter}.
*
* A {@link WebApplicationException} / {@link IllegalArgumentException} thrown
* from the converter is propagated unchanged. Any other exception throws by
* the converter is wrapped in a new {@link InserterException} before rethrowing.
*
* @param value parameter value to be converted/inserted.
* @return inserted value of a given Java type.
* @throws WebApplicationException in case the underlying parameter converter throws
* a {@code WebApplicationException}. The exception is rethrown without a change.
* @throws InserterException wrapping any other exception thrown by the parameter converter.
*/
protected final String toString(T value) {
String result = convert(value);
if (result == null) {
return defaultValue();
}
return result;
}

private String convert(T value) {
try {
return paramConverter.toString(value);
} catch (WebApplicationException | IllegalArgumentException ex) {
throw ex;
} catch (Exception ex) {
throw new InserterException(ex);
}
}

/**
* Check if there is a default value registered for the parameter.
*
* @return {@code true} if there is a default parameter value registered, {@code false} otherwise.
*/
protected final boolean isDefaultValueRegistered() {
return defaultValue != null;
}

/**
* Get converted default value.
*
* The conversion happens lazily during first call of the method.
*
* @return converted default value.
*/
protected final String defaultValue() {
if (!isDefaultValueRegistered()) {
return null;
}

return convertedDefaultValue.get();
}
}
Loading