105 lines
3.4 KiB
Java
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;
|
|
}
|
|
|
|
}
|