Repository: aries-rsa Updated Branches: refs/heads/master 55ab0a11a -> 177cb0aef
[ARIES-1758] Improved Version serialization using custom streams Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/177cb0ae Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/177cb0ae Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/177cb0ae Branch: refs/heads/master Commit: 177cb0aefd6dabee198b398f7aba18df10f7cf90 Parents: 55ab0a1 Author: Christian Schneider <cschn...@adobe.com> Authored: Fri Feb 9 12:12:49 2018 +0100 Committer: Christian Schneider <cschn...@adobe.com> Committed: Fri Feb 9 12:12:49 2018 +0100 ---------------------------------------------------------------------- .../repository/ZookeeperEndpointRepository.java | 1 - .../provider/tcp/LoaderObjectInputStream.java | 43 ----------- .../aries/rsa/provider/tcp/MethodInvoker.java | 15 ---- .../aries/rsa/provider/tcp/SerVersion.java | 25 ------- .../aries/rsa/provider/tcp/TCPServer.java | 7 +- .../rsa/provider/tcp/TcpInvocationHandler.java | 13 ++-- .../rsa/provider/tcp/VersionDeserializer.java | 67 ----------------- .../rsa/provider/tcp/VersionSerializer.java | 79 -------------------- .../tcp/ser/BasicObjectInputStream.java | 56 ++++++++++++++ .../tcp/ser/BasicObjectOutputStream.java | 24 ++++++ .../rsa/provider/tcp/ser/VersionMarker.java | 25 +++++++ .../provider/tcp/TcpProviderPrimitiveTest.java | 24 ++++++ .../tcp/myservice/PrimitiveService.java | 10 +++ .../tcp/myservice/PrimitiveServiceImpl.java | 19 +++++ 14 files changed, 169 insertions(+), 239 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/repository/ZookeeperEndpointRepository.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/repository/ZookeeperEndpointRepository.java b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/repository/ZookeeperEndpointRepository.java index e290e65..84bac77 100644 --- a/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/repository/ZookeeperEndpointRepository.java +++ b/discovery/zookeeper/src/main/java/org/apache/aries/rsa/discovery/zookeeper/repository/ZookeeperEndpointRepository.java @@ -15,7 +15,6 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.aries.rsa.discovery.endpoint.EndpointDescriptionParser; -import org.apache.aries.rsa.discovery.zookeeper.subscribe.InterfaceMonitorManager; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.KeeperException.NoNodeException; http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/LoaderObjectInputStream.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/LoaderObjectInputStream.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/LoaderObjectInputStream.java deleted file mode 100644 index ac60950..0000000 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/LoaderObjectInputStream.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.aries.rsa.provider.tcp; - -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectStreamClass; - -public class LoaderObjectInputStream extends ObjectInputStream { - - private ClassLoader loader; - - public LoaderObjectInputStream(InputStream in, ClassLoader loader) throws IOException { - super(in); - this.loader = loader; - } - - @Override - protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - try { - return loader.loadClass(desc.getName()); - } catch (ClassNotFoundException e) { - return super.resolveClass(desc); - } - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java index dadf5f7..4a4053a 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java @@ -24,8 +24,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; -import org.osgi.framework.Version; - public class MethodInvoker { private HashMap<Object, Object> primTypes; @@ -45,7 +43,6 @@ public class MethodInvoker { } public Object invoke(String methodName, Object[] args) { - args = VersionDeserializer.replaceAr(args); Class<?>[] parameterTypesAr = getTypes(args); Method method = null; try { @@ -56,18 +53,6 @@ public class MethodInvoker { } } - private void readReplaceVersion(Object[] args) { - if (args != null) { - for (int c=0; c<args.length; c++) { - Object current = args[c]; - if (current instanceof SerVersion) { - SerVersion serVersion = (SerVersion)current; - args[c] = new Version(serVersion.getVersion()); - } - } - } - } - private Method getMethod(String methodName, Class<?>[] parameterTypesAr) { try { return service.getClass().getMethod(methodName, parameterTypesAr); http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/SerVersion.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/SerVersion.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/SerVersion.java deleted file mode 100644 index ad912df..0000000 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/SerVersion.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.apache.aries.rsa.provider.tcp; - -import java.io.Serializable; - -import org.osgi.framework.Version; - -public class SerVersion implements Serializable { - private static final long serialVersionUID = 4725855052866235835L; - - private String version; - - public SerVersion() { - } - - public SerVersion(Version version) { - this.version = version.toString(); - } - - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java index fca6df3..1769a3d 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java @@ -33,6 +33,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import org.apache.aries.rsa.provider.tcp.ser.BasicObjectOutputStream; +import org.apache.aries.rsa.provider.tcp.ser.BasicObjectInputStream; import org.osgi.util.promise.Promise; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,8 +71,8 @@ public class TCPServer implements Closeable, Runnable { while (running) { try ( Socket socket = this.serverSocket.accept(); - ObjectInputStream ois = new LoaderObjectInputStream(socket.getInputStream(), serviceCL); - ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream()) + ObjectInputStream ois = new BasicObjectInputStream(socket.getInputStream(), serviceCL); + ObjectOutputStream objectOutput = new BasicObjectOutputStream(socket.getOutputStream()) ) { handleCall(ois, objectOutput); } catch (SocketException e) { @@ -86,7 +88,6 @@ public class TCPServer implements Closeable, Runnable { Object[] args = (Object[])ois.readObject(); Object result = invoker.invoke(methodName, args); result = resolveAsnyc(result); - result = VersionSerializer.replace(result); if (result instanceof InvocationTargetException) { result = ((InvocationTargetException) result).getCause(); } http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java index 0fd3526..8e78f4d 100644 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TcpInvocationHandler.java @@ -33,6 +33,9 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.Future; import java.util.function.Supplier; +import org.apache.aries.rsa.provider.tcp.ser.BasicObjectInputStream; +import org.apache.aries.rsa.provider.tcp.ser.BasicObjectOutputStream; +import org.apache.aries.rsa.provider.tcp.ser.VersionMarker; import org.osgi.framework.ServiceException; import org.osgi.framework.Version; import org.osgi.util.promise.Deferred; @@ -95,11 +98,10 @@ public class TcpInvocationHandler implements InvocationHandler { } private Object handleSyncCall(Method method, Object[] args) throws Throwable { - args = (Object[])VersionSerializer.replace(args); Object result; try ( Socket socket = openSocket(); - ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()) + ObjectOutputStream out = new BasicObjectOutputStream(socket.getOutputStream()) ) { socket.setSoTimeout(timeoutMillis); out.writeObject(method.getName()); @@ -107,7 +109,6 @@ public class TcpInvocationHandler implements InvocationHandler { out.writeObject(args); out.flush(); result = parseResult(socket); - result = VersionDeserializer.replace(result); } catch (SocketTimeoutException e) { throw new ServiceException("Timeout calling " + host + ":" + port + " method: " + method.getName(), ServiceException.REMOTE, e); } catch (Throwable e) { @@ -134,14 +135,14 @@ public class TcpInvocationHandler implements InvocationHandler { } private Object parseResult(Socket socket) throws Throwable { - try (ObjectInputStream in = new LoaderObjectInputStream(socket.getInputStream(), cl)) { + try (ObjectInputStream in = new BasicObjectInputStream(socket.getInputStream(), cl)) { return readReplaceVersion(in.readObject()); } } private Object readReplaceVersion(Object readObject) { - if (readObject instanceof SerVersion) { - return new Version(((SerVersion)readObject).getVersion()); + if (readObject instanceof VersionMarker) { + return new Version(((VersionMarker)readObject).getVersion()); } else { return readObject; } http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionDeserializer.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionDeserializer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionDeserializer.java deleted file mode 100644 index 84d965e..0000000 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionDeserializer.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.aries.rsa.provider.tcp; - -import org.osgi.framework.Version; - -public class VersionDeserializer { - - public static Object[] replaceAr(Object[] args) { - if (args == null) { - return null; - } - Object[] result = new Object[args.length]; - for (int c=0; c<args.length; c++) { - result[c] = replace(args[c]); - } - return result; - } - - public static Object replace(Object obj) { - if (obj == null) { - return obj; - } - if (obj.getClass().isArray()) { - if (obj.getClass().getComponentType() == SerVersion.class) { - return replaceVersionAr((SerVersion[]) obj); - } else if (obj.getClass().getComponentType() == Object.class) { - return replaceAr((Object[]) obj); - } else { - return obj; - } - } else if (obj instanceof SerVersion) { - SerVersion serVersion = (SerVersion) obj; - return Version.parseVersion(serVersion.getVersion()); - } else { - return obj; - } - } - - private static Version[] replaceVersionAr(SerVersion[] obj) { - if (obj == null) { - return null; - } - Version[] result = new Version[obj.length]; - for (int c=0; c<obj.length; c++) { - result[c] = Version.parseVersion(obj[c].getVersion()); - } - return result; - } - -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionSerializer.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionSerializer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionSerializer.java deleted file mode 100644 index 2de7114..0000000 --- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/VersionSerializer.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.aries.rsa.provider.tcp; - -import java.util.ArrayList; -import java.util.List; - -import org.osgi.framework.Version; - -public class VersionSerializer { - - public static Object replace(Object obj) { - if (obj == null) { - return null; - } - if (obj.getClass().isArray()) { - if (obj.getClass().getComponentType() == Version.class) { - return replaceVersionAr((Version[]) obj); - } else if (obj.getClass().getComponentType() == Object.class) { - return replaceAr((Object[]) obj); - } else { - return obj; - } - } else if (obj instanceof List) { - return replaceList((List)obj); - } else if (obj instanceof Version) { - return new SerVersion((Version) obj); - } else { - return obj; - } - } - - private static Object replaceList(List<Version> obj) { - List<SerVersion> result = new ArrayList<>(); - for (Version version : obj) { - result.add(new SerVersion(version)); - } - return result; - } - - private static SerVersion[] replaceVersionAr(Version[] obj) { - if (obj == null) { - return null; - } - SerVersion[] result = new SerVersion[obj.length]; - for (int c=0; c<obj.length; c++) { - result[c] = new SerVersion((Version) obj[c]); - } - return result; - } - - public static Object[] replaceAr(Object[] args) { - if (args == null) { - return null; - } - Object[] result = new Object[args.length]; - for (int c=0; c<args.length; c++) { - result[c] = replace(args[c]); - } - return result; - } - -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectInputStream.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectInputStream.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectInputStream.java new file mode 100644 index 0000000..d9bde6c --- /dev/null +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectInputStream.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.rsa.provider.tcp.ser; + +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; + +import org.osgi.framework.Version; + +public class BasicObjectInputStream extends ObjectInputStream { + + private ClassLoader loader; + + public BasicObjectInputStream(InputStream in, ClassLoader loader) throws IOException { + super(in); + enableResolveObject(true); + this.loader = loader; + } + + @Override + protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { + try { + return loader.loadClass(desc.getName()); + } catch (ClassNotFoundException e) { + return super.resolveClass(desc); + } + } + + @Override + protected Object resolveObject(Object obj) throws IOException { + if (obj instanceof VersionMarker) { + VersionMarker verionMarker = (VersionMarker)obj; + return Version.parseVersion(verionMarker.getVersion()); + } else { + return super.resolveObject(obj); + } + } +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectOutputStream.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectOutputStream.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectOutputStream.java new file mode 100644 index 0000000..39b5399 --- /dev/null +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/BasicObjectOutputStream.java @@ -0,0 +1,24 @@ +package org.apache.aries.rsa.provider.tcp.ser; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.OutputStream; + +import org.osgi.framework.Version; + +public class BasicObjectOutputStream extends ObjectOutputStream { + + public BasicObjectOutputStream(OutputStream out) throws IOException { + super(out); + enableReplaceObject(true); + } + + @Override + protected Object replaceObject(Object obj) throws IOException { + if (obj instanceof Version) { + return new VersionMarker((Version) obj); + } else { + return super.replaceObject(obj); + } + } +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/VersionMarker.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/VersionMarker.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/VersionMarker.java new file mode 100644 index 0000000..1f9f296 --- /dev/null +++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/ser/VersionMarker.java @@ -0,0 +1,25 @@ +package org.apache.aries.rsa.provider.tcp.ser; + +import java.io.Serializable; + +import org.osgi.framework.Version; + +public class VersionMarker implements Serializable { + private static final long serialVersionUID = 4725855052866235835L; + + private String version; + + public VersionMarker() { + } + + public VersionMarker(Version version) { + this.version = version.toString(); + } + + public String getVersion() { + return version; + } + public void setVersion(String version) { + this.version = version; + } +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderPrimitiveTest.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderPrimitiveTest.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderPrimitiveTest.java index 8badef7..05ceb8b 100644 --- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderPrimitiveTest.java +++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderPrimitiveTest.java @@ -18,14 +18,20 @@ */ package org.apache.aries.rsa.provider.tcp; +import static java.util.Arrays.asList; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.everyItem; +import static org.hamcrest.Matchers.isIn; import static org.hamcrest.core.StringStartsWith.startsWith; import static org.junit.Assert.assertThat; import static org.osgi.framework.Version.parseVersion; import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.apache.aries.rsa.provider.tcp.myservice.PrimitiveService; import org.apache.aries.rsa.provider.tcp.myservice.PrimitiveServiceImpl; @@ -112,6 +118,24 @@ public class TcpProviderPrimitiveTest { public void testVersionAr() { assertThat(myServiceProxy.callVersionAr(new Version[] {parseVersion("1.0.0")}), equalTo(new Version[] {parseVersion("1.0.0")})); } + + @Test + public void testVersionList() { + assertThat(myServiceProxy.callVersionList(Arrays.asList(parseVersion("1.0.0"))), equalTo(Arrays.asList(parseVersion("1.0.0")))); + } + + @Test + public void testVersionSet() { + Set<Version> set = new HashSet<>(asList(parseVersion("1.0.0"))); + assertThat(myServiceProxy.callVersionSet(set), everyItem(isIn(set))); + } + + @Test + public void testVersionMap() { + HashMap<Version, Version> map = new HashMap<>(); + map.put(parseVersion("1.2.3"), parseVersion("2.3.4")); + assertThat(myServiceProxy.callVersionMap(map).entrySet(), everyItem(isIn(map.entrySet()))); + } @AfterClass public static void close() throws IOException { http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveService.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveService.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveService.java index 679c2fa..33d0d06 100644 --- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveService.java +++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveService.java @@ -18,6 +18,10 @@ */ package org.apache.aries.rsa.provider.tcp.myservice; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.osgi.framework.Version; public interface PrimitiveService { @@ -41,4 +45,10 @@ public interface PrimitiveService { Version callVersion(Version version); Version[] callVersionAr(Version[] version); + + List<Version> callVersionList(List<Version> version); + + Map<Version, Version> callVersionMap(Map<Version, Version> map); + + Set<Version> callVersionSet(Set<Version> set); } http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/177cb0ae/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveServiceImpl.java ---------------------------------------------------------------------- diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveServiceImpl.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveServiceImpl.java index 9039dc2..7bf3fe1 100644 --- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveServiceImpl.java +++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/PrimitiveServiceImpl.java @@ -1,5 +1,9 @@ package org.apache.aries.rsa.provider.tcp.myservice; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.osgi.framework.Version; public class PrimitiveServiceImpl implements PrimitiveService { @@ -55,4 +59,19 @@ public class PrimitiveServiceImpl implements PrimitiveService { return version; } + @Override + public List<Version> callVersionList(List<Version> version) { + return version; + } + + @Override + public Map<Version, Version> callVersionMap(Map<Version, Version> map) { + return map; + } + + @Override + public Set<Version> callVersionSet(Set<Version> set) { + return set; + } + }