diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubCache.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubCache.java index 84df48a..7980393 100644 --- a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubCache.java +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubCache.java @@ -30,6 +30,22 @@ class StubCache { //holds key locks for LRU map private ConcurrentHashMap nameLocks = new ConcurrentHashMap(); + void clear(QName name) { + + //obtain a lock for current key + Lock nameLock = lockFor(name); + + try { + + cache.remove(name); + } + finally { + nameLock.unlock(); + } + + } + + Service get(QName name,Callable task) { //obtain a lock for current key diff --git a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java index 1cbf1ab..fd4ff8d 100644 --- a/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java +++ b/src/main/java/org/gcube/common/clients/stubs/jaxws/StubFactory.java @@ -112,7 +112,14 @@ public class StubFactory implements StubFactoryDSL.AtClause { registerHandler(provider, target); return stub; - } catch (Exception e) { + + } catch (Error e) { //bad stubs/wsdls cause java.lang.Errors + + cache.clear(target.qName()); //clear cache + + throw new RuntimeException("could not configure discovery service", e); + + } catch (Exception e) { //bad stubs can cause java.lang.Errors (!) throw new RuntimeException("could not configure discovery service", e); } } diff --git a/src/test/java/org/acme/jaxws/stubs/StatelessStub.java b/src/test/java/org/acme/jaxws/stubs/StatelessStub.java index 18c0afb..3e5a735 100644 --- a/src/test/java/org/acme/jaxws/stubs/StatelessStub.java +++ b/src/test/java/org/acme/jaxws/stubs/StatelessStub.java @@ -28,6 +28,14 @@ import org.gcube.common.clients.stubs.jaxws.GCoreService; @XmlSeeAlso(Sometype.class) public interface StatelessStub { + public class AcmeConstants { + + public static final String serviceNS = "http://acme.org"; + public static final String porttypeNS = "http://acme.org"; + public static final QName name = new QName(serviceNS,"AcmeService"); + public static final String porttypeLN = "AcmePortType"; + } + public static final QName name = new QName("http://acme.org/service","StatelessService"); public static final String porttypeNS = "http://acme.org";