package eu.dnetlib.iis.wf.export.actionmanager.entity.facade; import java.util.Map; import javax.xml.ws.BindingProvider; import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder; import org.apache.log4j.Logger; import eu.dnetlib.data.mdstore.MDStoreService; import eu.dnetlib.data.mdstore.MDStoreServiceException; import eu.dnetlib.enabling.tools.JaxwsServiceResolverImpl; /** * Web service based {@link MDStoreFacade}. * * @author mhorst * */ public class WebServiceMDStoreFacade implements MDStoreFacade { private static final Logger log = Logger.getLogger(WebServiceMDStoreFacade.class); /** * Web service. */ private final MDStoreService service; // -------------------- CONSTRUCTORS ------------------------- public WebServiceMDStoreFacade(MDStoreService service) { this.service = service; } public WebServiceMDStoreFacade(String serviceLocation, long serviceReadTimeout, long serviceConnectionTimeout) { W3CEndpointReferenceBuilder eprBuilder = new W3CEndpointReferenceBuilder(); eprBuilder.address(serviceLocation); eprBuilder.build(); this.service = new JaxwsServiceResolverImpl().getService(MDStoreService.class, 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); } } // -------------------- PUBLIC ------------------------------- @Override public String fetchRecord(String mdStoreId, String recordId) throws MDStoreServiceException { return service.deliverRecord(mdStoreId, recordId); } }