dnet-hadoop/dhp-wf/dhp-wf-import/src/main/java/eu/dnetlib/dhp/wf/importer/facade/AbstractResultSetAwareWebSe...

105 lines
3.4 KiB
Java

package eu.dnetlib.dhp.wf.importer.facade;
import java.util.Map;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
import org.apache.log4j.Logger;
import eu.dnetlib.enabling.tools.JaxwsServiceResolverImpl;
/**
* Abstract class utilized by all WebService facades.
* @author mhorst
*
*/
public abstract class AbstractResultSetAwareWebServiceFacade<T> {
private final Logger log = Logger.getLogger(this.getClass());
/**
* Web service.
*/
private final T service;
/**
* ResultSet read timeout.
*/
private final long resultSetReadTimeout;
/**
* ResultSet connection timeout.
*/
private final long resultSetConnectionTimeout;
/**
* ResultSet page size.
*/
private final int resultSetPageSize;
//------------------------ CONSTRUCTORS -------------------
/**
* Instantiates underlying service.
* @param clazz webservice class
* @param serviceLocation webservice location
* @param serviceReadTimeout service read timeout
* @param serviceConnectionTimeout service connection timeout
* @param resultSetReadTimeout resultset read timeout
* @param resultSetConnectionTimeout resultset connection timeout
* @param resultSetPageSize resultset page size
*/
protected AbstractResultSetAwareWebServiceFacade(Class<T> clazz, String serviceLocation,
long serviceReadTimeout, long serviceConnectionTimeout,
long resultSetReadTimeout, long resultSetConnectionTimeout, int resultSetPageSize) {
W3CEndpointReferenceBuilder eprBuilder = new W3CEndpointReferenceBuilder();
eprBuilder.address(serviceLocation);
eprBuilder.build();
this.service = new JaxwsServiceResolverImpl().getService(clazz, eprBuilder.build());
if (this.service instanceof BindingProvider) {
log.info(String.format("setting timeouts for %s: read timeout (%s) and connect timeout (%s)",
BindingProvider.class, serviceReadTimeout, serviceConnectionTimeout));
final Map<String, Object> requestContext = ((BindingProvider) service).getRequestContext();
// can't be sure about which will be used. Set them all.
requestContext.put("com.sun.xml.internal.ws.request.timeout", serviceReadTimeout);
requestContext.put("com.sun.xml.internal.ws.connect.timeout", serviceConnectionTimeout);
requestContext.put("com.sun.xml.ws.request.timeout", serviceReadTimeout);
requestContext.put("com.sun.xml.ws.connect.timeout", serviceConnectionTimeout);
requestContext.put("javax.xml.ws.client.receiveTimeout", serviceReadTimeout);
requestContext.put("javax.xml.ws.client.connectionTimeout", serviceConnectionTimeout);
}
this.resultSetReadTimeout = resultSetReadTimeout;
this.resultSetConnectionTimeout = resultSetConnectionTimeout;
this.resultSetPageSize = resultSetPageSize;
}
//------------------------ GETTERS -------------------------
public T getService() {
return service;
}
public long getResultSetReadTimeout() {
return resultSetReadTimeout;
}
public long getResultSetConnectionTimeout() {
return resultSetConnectionTimeout;
}
public int getResultSetPageSize() {
return resultSetPageSize;
}
}