Author: rfeng
Date: Tue Jul 8 10:05:57 2008
New Revision: 674882
URL: http://svn.apache.org/viewvc?rev=674882&view=rev
Log:
Refactor the CorbanameURL and fix the corbaname parsing issue on Linux
Added:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
(contents, props changed)
- copied, changed from r674676,
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java
Removed:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java
Modified:
tuscany/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/jdk/DefaultCorbaHost.java
tuscany/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
tuscany/java/sca/modules/host-corba/src/test/java/org/apache/tuscany/sca/host/corba/UtilsTestCase.java
Modified:
tuscany/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/jdk/DefaultCorbaHost.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/jdk/DefaultCorbaHost.java?rev=674882&r1=674881&r2=674882&view=diff
==============================================================================
---
tuscany/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/jdk/DefaultCorbaHost.java
(original)
+++
tuscany/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/jdk/DefaultCorbaHost.java
Tue Jul 8 10:05:57 2008
@@ -31,7 +31,7 @@
import org.apache.tuscany.sca.host.corba.CorbaHost;
import org.apache.tuscany.sca.host.corba.CorbaHostException;
import org.apache.tuscany.sca.host.corba.CorbaHostUtils;
-import org.apache.tuscany.sca.host.corba.CorbanameDetails;
+import org.apache.tuscany.sca.host.corba.CorbanameURL;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.CosNaming.NameComponent;
@@ -88,7 +88,7 @@
}
public void registerServant(String uri, Object servantObject) throws
CorbaHostException {
- CorbanameDetails details = CorbaHostUtils.getServiceDetails(uri);
+ CorbanameURL details = CorbaHostUtils.getServiceDetails(uri);
ORB orb = createORB(details.getHost(), details.getPort(), false);
registerServantCommon(orb, details.getNameService(),
details.getNamePath(), servantObject);
}
@@ -96,7 +96,7 @@
public void registerServant(ORB orb, String name, Object servantObject)
throws CorbaHostException {
validateName(name);
List<String> namePath = tokenizeNamePath(name);
- registerServantCommon(orb, CorbaHostUtils.DEFAULT_NAME_SERVICE,
namePath, servantObject);
+ registerServantCommon(orb, CorbanameURL.DEFAULT_NAME_SERVICE,
namePath, servantObject);
}
private void registerServantCommon(ORB orb, String nameService,
List<String> namePath, Object servantObject)
@@ -130,7 +130,7 @@
}
public void unregisterServant(String uri) throws CorbaHostException {
- CorbanameDetails details = CorbaHostUtils.getServiceDetails(uri);
+ CorbanameURL details = CorbaHostUtils.getServiceDetails(uri);
ORB orb = createORB(details.getHost(), details.getPort(), false);
unregisterServantCommon(orb, details.getNamePath());
}
@@ -143,7 +143,7 @@
private void unregisterServantCommon(ORB orb, List<String> namePath)
throws CorbaHostException {
try {
- NamingContext namingCtx = getNamingContext(orb,
CorbaHostUtils.DEFAULT_NAME_SERVICE);
+ NamingContext namingCtx = getNamingContext(orb,
CorbanameURL.DEFAULT_NAME_SERVICE);
for (int i = 0; i < namePath.size() - 1; i++) {
NameComponent nc = new NameComponent(namePath.get(i), "");
namingCtx = NamingContextHelper.narrow(namingCtx.resolve(new
NameComponent[] {nc}));
@@ -157,7 +157,7 @@
public Object lookup(String name, String host, int port) throws
CorbaHostException {
validateName(name);
- return lookup(CorbaHostUtils.createCorbanameURI(name, host, port));
+ return lookup(CorbaHostUtils.createCorbanameURI(host, port, name));
}
public Object lookup(String uri) throws CorbaHostException {
Modified:
tuscany/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java?rev=674882&r1=674881&r2=674882&view=diff
==============================================================================
---
tuscany/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
(original)
+++
tuscany/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
Tue Jul 8 10:05:57 2008
@@ -89,7 +89,7 @@
ORB orb = host.createORB(LOCALHOST, DEFAULT_PORT, false);
TestInterface servant = new TestInterfaceServant();
String objName = "Nested/Test";
- String uri = CorbaHostUtils.createCorbanameURI(objName, LOCALHOST,
DEFAULT_PORT);
+ String uri = CorbaHostUtils.createCorbanameURI(LOCALHOST,
DEFAULT_PORT, objName);
host.registerServant(orb, objName, servant);
// lookup using name, host and port
@@ -113,7 +113,7 @@
try {
String objName = "Unregistering/Test";
ORB orb = host.createORB(LOCALHOST, DEFAULT_PORT, false);
- String uri = CorbaHostUtils.createCorbanameURI(objName, LOCALHOST,
DEFAULT_PORT);
+ String uri = CorbaHostUtils.createCorbanameURI(LOCALHOST,
DEFAULT_PORT, objName);
TestInterface servant = new TestInterfaceServant();
// creating and releasing using name, host, port
@@ -166,7 +166,7 @@
// test using URI
try {
TestInterface servant = new TestInterfaceServant();
- String uri =
CorbaHostUtils.createCorbanameURI("AlreadyRegisteredTest2", LOCALHOST,
DEFAULT_PORT);
+ String uri = CorbaHostUtils.createCorbanameURI(LOCALHOST,
DEFAULT_PORT, "AlreadyRegisteredTest2");
host.registerServant(uri, servant);
host.registerServant(uri, servant);
fail();
@@ -225,7 +225,7 @@
// test using URI
try {
- String uri =
CorbaHostUtils.createCorbanameURI("NonExistingReference1", LOCALHOST,
DEFAULT_PORT);
+ String uri = CorbaHostUtils.createCorbanameURI(LOCALHOST,
DEFAULT_PORT, "NonExistingReference1");
host.unregisterServant(uri);
fail();
} catch (CorbaHostException e) {
Modified:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java?rev=674882&r1=674881&r2=674882&view=diff
==============================================================================
---
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
(original)
+++
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbaHostUtils.java
Tue Jul 8 10:05:57 2008
@@ -19,48 +19,31 @@
package org.apache.tuscany.sca.host.corba;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
/**
* Various utilities for host-corba
*/
public class CorbaHostUtils {
- public static String DEFAULT_NAME_SERVICE = "NameService";
- public static String DEFAULT_HOST = "localhost";
- public static int DEFAULT_PORT = 900;
-
/**
* Tests if given URI is valid corbaname string
* @param uri
* @return
*/
public static boolean isValidCorbanameURI(String uri) {
- return uri != null && uri.startsWith("corbaname") && uri.contains("#")
&& uri.indexOf('#') < uri.length() - 1;
+ return uri != null && uri.startsWith("corbaname:") &&
uri.contains("#") && uri.indexOf('#') < uri.length() - 1;
}
/**
* Creates corbaname URI basing on given parameters
- *
- * @param name
* @param host
* @param port
+ * @param name
+ *
* @return
*/
- public static String createCorbanameURI(String name, String host, int
port) {
- String portStr = null;
- if (port > 0) {
- portStr = Integer.toString(port);
- } else {
- portStr = "";
- }
- if (host == null) {
- host = "";
- }
- return "corbaname::" + host + ":" + portStr + "#" + name;
+ public static String createCorbanameURI(String host, int port, String
name) {
+ return new CorbanameURL(host, port, name).toString();
}
/**
@@ -69,69 +52,8 @@
* @param uri
* @return
*/
- public static CorbanameDetails getServiceDetails(String uri) {
- CorbanameDetails details = new CorbanameDetails();
- StringTokenizer hashTokenizer = new StringTokenizer(uri, "#");
- if (hashTokenizer.countTokens() == 2) {
- String serviceLocation = hashTokenizer.nextToken();
- String servicePath = hashTokenizer.nextToken();
- StringTokenizer pathDisc = new StringTokenizer(servicePath, "/");
- List<String> namePath = new ArrayList<String>();
- while (pathDisc.hasMoreTokens()) {
- namePath.add(pathDisc.nextToken());
- }
- details.setNamePath(namePath);
- StringTokenizer slashTokenizer = new
StringTokenizer(serviceLocation, "/");
- String serviceHost = slashTokenizer.nextToken();
- String nameService = null;
- if (slashTokenizer.hasMoreTokens()) {
- nameService = slashTokenizer.nextToken();
- } else {
- nameService = DEFAULT_NAME_SERVICE;
- }
- details.setNameService(nameService);
- StringTokenizer colonTokenizer = new StringTokenizer(serviceHost,
":", true);
- if (colonTokenizer.countTokens() > 0 &&
colonTokenizer.nextToken().equals("corbaname")) {
- String host = null;
- int port = 0;
- try {
- colonTokenizer.nextToken();
- String methodPart = colonTokenizer.nextToken();
- if (!methodPart.equals(":")) {
- colonTokenizer.nextToken();
- }
- host = colonTokenizer.nextToken();
- if (host.equals(":")) {
- // no host provided, no need to get another ":"
- host = DEFAULT_HOST;
- } else {
- // host provided, so another ":" should be read
- colonTokenizer.nextToken();
- }
- try {
- port = Integer.parseInt(colonTokenizer.nextToken());
- } catch (Exception e) {
- port = DEFAULT_PORT;
- }
- } catch (NoSuchElementException e) {
- } finally {
- if (host == null) {
- // parsing failed - user didn't provide host
- host = DEFAULT_HOST;
- }
- if (port == 0) {
- // parsing failed - user didn't provide port
- port = DEFAULT_PORT;
- }
- }
- details.setHost(host);
- details.setPort(port);
- } else {
- throw new IllegalArgumentException("Given corbaname URI does
not begin with 'corbaname'");
- }
- } else {
- throw new IllegalArgumentException("Given corbaname is missing
hash separator");
- }
+ public static CorbanameURL getServiceDetails(String uri) {
+ CorbanameURL details = new CorbanameURL(uri);
return details;
}
Copied:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
(from r674676,
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java)
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java?p2=tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java&p1=tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java&r1=674676&r2=674882&rev=674882&view=diff
==============================================================================
---
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameDetails.java
(original)
+++
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
Tue Jul 8 10:05:57 2008
@@ -19,18 +19,117 @@
package org.apache.tuscany.sca.host.corba;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
import java.util.List;
/**
* Holds corbaname URI details
*/
-public class CorbanameDetails {
+public class CorbanameURL {
+ public static String DEFAULT_PROTOCOL = "iiop";
+ public static String DEFAULT_VERSION = "";
+ public static String DEFAULT_NAME_SERVICE = "NameService";
+ public static String DEFAULT_HOST = "localhost";
+ public static int DEFAULT_PORT = 2809;
+ private String protocol = "";
+ private String version = "";
private String host;
private int port;
private String nameService;
private List<String> namePath;
+ public CorbanameURL(String host, int port, String namePath, String
nameService) {
+ super();
+ this.host = host == null ? DEFAULT_HOST : host;
+ this.port = port <= 0 ? DEFAULT_PORT : port;
+ this.namePath = parseName(namePath);
+ this.nameService = nameService == null ? DEFAULT_NAME_SERVICE :
nameService;
+ }
+
+ public CorbanameURL(String host, int port, String namePath) {
+ this(host, port, namePath, DEFAULT_NAME_SERVICE);
+ }
+
+ public CorbanameURL(String url) {
+ if (url == null || (!url.startsWith("corbaname"))) {
+ throw new IllegalArgumentException("Malformed corbaname URL: " +
url);
+ }
+ try {
+ url = URLDecoder.decode(url, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new IllegalArgumentException(e);
+ }
+ String[] parts = url.split("#");
+ if (parts.length == 2) {
+ String serviceLocation = parts[0];
+ String servicePath = parts[1];
+ namePath = parseName(servicePath);
+
+ parts = serviceLocation.split("/");
+ if (parts.length == 2) {
+ nameService = parts[1];
+ } else {
+ nameService = DEFAULT_NAME_SERVICE;
+ }
+
+ parts = parts[0].split(":");
+
+ if (parts.length >= 2) {
+ protocol = parts[1];
+ }
+ if (parts.length >= 3) {
+ version = parts[2];
+ String[] strs = version.split("@");
+ if (strs.length == 2) {
+ version = strs[0];
+ host = strs[1];
+ } else {
+ version = "";
+ host = strs[0];
+ }
+ }
+ if (host == null || "".equals(host)) {
+ host = DEFAULT_HOST;
+ }
+ if (parts.length >= 4 && !"".equals(parts[3])) {
+ port = Integer.parseInt(parts[3]);
+ } else {
+ port = DEFAULT_PORT;
+ }
+ } else {
+ throw new IllegalArgumentException("Malformed corbaname URL: " +
url);
+ }
+ }
+
+ private static List<String> parseName(String name) {
+ try {
+ name = URLDecoder.decode(name, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new IllegalArgumentException(e);
+ }
+ String[] names = name.split("/");
+ return Arrays.asList(names);
+ }
+
+ public String getProtocol() {
+ return protocol;
+ }
+
+ public void setProtocol(String protocol) {
+ this.protocol = protocol;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
public String getHost() {
return host;
}
@@ -63,4 +162,25 @@
this.namePath = namePath;
}
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("corbaname:");
+ buf.append(protocol).append(":");
+ if (version != null && !"".equals(version)) {
+ buf.append(version).append("@");
+ }
+ buf.append(host).append(":").append(port);
+ buf.append("/").append(nameService);
+ buf.append("#");
+ if (namePath != null) {
+ for (int i = 0; i < namePath.size(); i++) {
+ buf.append(namePath.get(i));
+ if (i < namePath.size() - 1) {
+ buf.append("/");
+ }
+ }
+ }
+ return buf.toString();
+ }
+
}
Propchange:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
tuscany/java/sca/modules/host-corba/src/main/java/org/apache/tuscany/sca/host/corba/CorbanameURL.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified:
tuscany/java/sca/modules/host-corba/src/test/java/org/apache/tuscany/sca/host/corba/UtilsTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/host-corba/src/test/java/org/apache/tuscany/sca/host/corba/UtilsTestCase.java?rev=674882&r1=674881&r2=674882&view=diff
==============================================================================
---
tuscany/java/sca/modules/host-corba/src/test/java/org/apache/tuscany/sca/host/corba/UtilsTestCase.java
(original)
+++
tuscany/java/sca/modules/host-corba/src/test/java/org/apache/tuscany/sca/host/corba/UtilsTestCase.java
Tue Jul 8 10:05:57 2008
@@ -26,13 +26,11 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.tuscany.sca.host.corba.CorbanameDetails;
-import org.apache.tuscany.sca.host.corba.CorbaHostUtils;
import org.junit.Test;
public class UtilsTestCase {
- private void assertDetailsAreOk(CorbanameDetails details, String host, int
port, String nameService, List<String> namePath) {
+ private void assertDetailsAreOk(CorbanameURL details, String host, int
port, String nameService, List<String> namePath) {
assertTrue(details.getHost().equals(host));
assertTrue(details.getNameService().equals(nameService));
assertTrue(details.getPort() == port);
@@ -45,7 +43,7 @@
@Test
public void test_validCorbaname() {
String testUri = null;
- CorbanameDetails details = null;
+ CorbanameURL details = null;
List<String> namePath = null;
testUri = "corbaname:ignore:host:1234/Service#Reference";
@@ -58,43 +56,43 @@
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, "host", CorbaHostUtils.DEFAULT_PORT,
"Service", namePath);
+ assertDetailsAreOk(details, "host", CorbanameURL.DEFAULT_PORT,
"Service", namePath);
testUri = "corbaname:ignore:host/Service#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, "host", CorbaHostUtils.DEFAULT_PORT,
"Service", namePath);
+ assertDetailsAreOk(details, "host", CorbanameURL.DEFAULT_PORT,
"Service", namePath);
testUri = "corbaname:ignore:/Service#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, "Service", namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, "Service", namePath);
testUri = "corbaname:ignore/Service#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, "Service", namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, "Service", namePath);
testUri = "corbaname:/Service#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, "Service", namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, "Service", namePath);
testUri = "corbaname/Service#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, "Service", namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, "Service", namePath);
testUri = "corbaname#Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
namePath = new ArrayList<String>();
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, CorbaHostUtils.DEFAULT_NAME_SERVICE, namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, CorbanameURL.DEFAULT_NAME_SERVICE, namePath);
testUri = "corbaname#Parent/Mid/Reference";
details = CorbaHostUtils.getServiceDetails(testUri);
@@ -102,7 +100,7 @@
namePath.add("Parent");
namePath.add("Mid");
namePath.add("Reference");
- assertDetailsAreOk(details, CorbaHostUtils.DEFAULT_HOST,
CorbaHostUtils.DEFAULT_PORT, CorbaHostUtils.DEFAULT_NAME_SERVICE, namePath);
+ assertDetailsAreOk(details, CorbanameURL.DEFAULT_HOST,
CorbanameURL.DEFAULT_PORT, CorbanameURL.DEFAULT_NAME_SERVICE, namePath);
}
@Test
@@ -128,7 +126,7 @@
@Test
public void test_creatingCorbanameURI() {
- String uri = CorbaHostUtils.createCorbanameURI("SomeName", "SomeHost",
1000);
- assertEquals("corbaname::SomeHost:1000#SomeName", uri);
+ String uri = CorbaHostUtils.createCorbanameURI("SomeHost", 1000,
"SomeName");
+ assertEquals("corbaname::SomeHost:1000/NameService#SomeName", uri);
}
}