From bf45dfc898d5511d2a4ed7c5a5618318044f95c6 Mon Sep 17 00:00:00 2001 From: "fabio.simeoni" Date: Fri, 18 Jan 2013 14:55:29 +0000 Subject: [PATCH] merged from trunk git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/branches/common/common-gcore-stubs/1.0@68087 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../common/clients/stubs/jaxws/StubCache.java | 16 ++++++++++++++++ .../common/clients/stubs/jaxws/StubFactory.java | 9 ++++++++- .../java/org/acme/jaxws/stubs/StatelessStub.java | 8 ++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) 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";