From 1305be42ad1ae54e4aff090467432bb5f30f450e Mon Sep 17 00:00:00 2001 From: antelder Date: Mon, 6 Jun 2011 06:34:15 +0000 Subject: Fix NPE when stopping a remote composite git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1132533 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tuscany/sca/impl/DeployedComposite.java | 1 + .../java/org/apache/tuscany/sca/impl/NodeImpl.java | 7 +++--- .../org/apache/tuscany/sca/impl/ServiceHelper.java | 29 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) (limited to 'sca-java-2.x/trunk/modules') diff --git a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/DeployedComposite.java b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/DeployedComposite.java index 5a72906e1e..7eba965b1a 100644 --- a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/DeployedComposite.java +++ b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/DeployedComposite.java @@ -86,6 +86,7 @@ public class DeployedComposite { // TODO: Ideally deployer.build would set the name and uri to what this needs builtComposite.setName(composite.getName()); builtComposite.setURI(composite.getURI()); + builtComposite.setContributionURI(composite.getContributionURI()); monitor.analyzeProblems(); compositeContext = new CompositeContext(extensionPointRegistry, diff --git a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java index d1448f498d..1b4f0a103f 100644 --- a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java +++ b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java @@ -261,7 +261,10 @@ public class NodeImpl implements Node { public void stopComposite(String contributionURI, String compositeURI) throws ActivationException { String key = contributionURI+"/"+compositeURI; DeployedComposite dc = startedComposites.remove(key); - if (dc == null) { + if (dc != null) { + dc.stop(); + stoppedComposites.put(key, dc); + } else { String member = domainRegistry.getRunningMember(contributionURI, compositeURI); if (member == null) { throw new IllegalStateException("composite not started: " + compositeURI); @@ -272,8 +275,6 @@ public class NodeImpl implements Node { throw new ActivationException(response); } } - dc.stop(); - stoppedComposites.put(key, dc); } public String getDomainName() { diff --git a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java index 42a550d543..fc46018904 100644 --- a/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java +++ b/sca-java-2.x/trunk/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java @@ -19,8 +19,13 @@ package org.apache.tuscany.sca.impl; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import java.util.List; +import javax.xml.bind.JAXBElement; + import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Component; import org.apache.tuscany.sca.assembly.ComponentReference; @@ -42,6 +47,7 @@ import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; import org.apache.tuscany.sca.interfacedef.java.JavaInterface; import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; import org.apache.tuscany.sca.runtime.DomainRegistry; +import org.apache.tuscany.sca.runtime.ContributionDescription; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentReference; import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; @@ -89,6 +95,14 @@ public class ServiceHelper { new CompositeContext(extensionPointRegistry, domainRegistry, null, null, null, deployer.getSystemDefinitions()); + if (serviceInterface == null) { + try { + serviceInterface = (Class)findInterface(endpoint, domainRegistry); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + RuntimeEndpointReference epr; try { epr = @@ -170,6 +184,8 @@ public class ServiceHelper { // The interface is not assignable from the interface contract interfaceContract = javaInterfaceFactory.createJavaInterfaceContract(); JavaInterface callInterface = javaInterfaceFactory.createJavaInterface(businessInterface); + callInterface.setRemotable(true); + callInterface.resetDataBinding(JAXBElement.class.getName()); interfaceContract.setInterface(callInterface); if (callInterface.getCallbackClass() != null) { interfaceContract.setCallbackInterface(javaInterfaceFactory.createJavaInterface(callInterface @@ -179,4 +195,17 @@ public class ServiceHelper { return interfaceContract; } + + private static Class findInterface(Endpoint endpoint, DomainRegistry domainRegistry) throws MalformedURLException, ClassNotFoundException { + Interface iface = endpoint.getService().getInterfaceContract().getInterface(); + if (iface instanceof JavaInterface) { + String curi = domainRegistry.getContainingCompositesContributionURI(endpoint.getComponent().getName()); + if (curi != null) { + ContributionDescription ic = domainRegistry.getInstalledContribution(curi); + ClassLoader cl = new URLClassLoader(new URL[]{new URL(ic.getURL())}); + return cl.loadClass(((JavaInterface)iface).getName()); + } + } + return null; + } } -- cgit v1.2.3