You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2017/04/16 22:32:51 UTC
[60/72] [abbrv] flex-blazeds git commit: - Moved the initialization
of the ClassDeserializationValidator into the SerializationContext (so it is
always initialized). - Adjusted the rest to correctly work with these
changes.
- Moved the initialization of the ClassDeserializationValidator into the SerializationContext (so it is always initialized).
- Adjusted the rest to correctly work with these changes.
Project: http://git-wip-us.apache.org/repos/asf/flex-blazeds/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-blazeds/commit/11b0aa13
Tree: http://git-wip-us.apache.org/repos/asf/flex-blazeds/tree/11b0aa13
Diff: http://git-wip-us.apache.org/repos/asf/flex-blazeds/diff/11b0aa13
Branch: refs/heads/master
Commit: 11b0aa132d9a43bf81fa12654ff227ff247b4627
Parents: c4ffd05
Author: Christofer Dutz <ch...@codecentric.de>
Authored: Fri Feb 24 14:34:41 2017 +0100
Committer: Christofer Dutz <ch...@codecentric.de>
Committed: Fri Feb 24 14:34:41 2017 +0100
----------------------------------------------------------------------
.../main/java/flex/messaging/MessageBroker.java | 3 +
.../config/FlexConfigurationManager.java | 20 +-
.../config/MessagingConfiguration.java | 8 -
.../config/ServerConfigurationParser.java | 14 -
.../flex/messaging/io/SerializationContext.java | 97 +--
.../ClassDeserializationValidator.java | 66 +-
.../AmfDeserializationValidatorTest.java | 2 +-
.../io/amfx/AmfxSerializationTest.java | 4 +
.../messaging/services/RemotingService.java | 4 +-
.../io/amf/client/AMFConnectionIT.java | 706 +++++++------------
.../messaging/io/amf/client/AMFDataTypeIT.java | 660 +++++++----------
.../flex/messaging/util/TestServerWrapper.java | 6 +-
12 files changed, 626 insertions(+), 964 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/MessageBroker.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/MessageBroker.java b/core/src/main/java/flex/messaging/MessageBroker.java
index 3ffd2e4..23b308c 100644
--- a/core/src/main/java/flex/messaging/MessageBroker.java
+++ b/core/src/main/java/flex/messaging/MessageBroker.java
@@ -186,6 +186,9 @@ public class MessageBroker extends ManageableComponent
factories = new HashMap<String, FlexFactory>();
registeredEndpoints = new HashMap<String, String>();
+ // Initialize the default validator.
+ deserializationValidator = new ClassDeserializationValidator();
+
// Add the built-in java factory
addFactory("java", new JavaFactory());
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java b/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
index 313cb87..480b122 100644
--- a/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
+++ b/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
@@ -44,11 +44,11 @@ import java.io.File;
*/
public class FlexConfigurationManager implements ConfigurationManager
{
- static final String DEFAULT_CONFIG_PATH = "/WEB-INF/flex/services-config.xml";
+ private static final String DEFAULT_CONFIG_PATH = "/WEB-INF/flex/services-config.xml";
- protected String configurationPath = null;
- protected ConfigurationFileResolver configurationResolver = null;
- protected ConfigurationParser parser = null;
+ private String configurationPath = null;
+ private ConfigurationFileResolver configurationResolver = null;
+ private ConfigurationParser parser = null;
public MessagingConfiguration getMessagingConfiguration(ServletConfig servletConfig)
{
@@ -88,10 +88,10 @@ public class FlexConfigurationManager implements ConfigurationManager
parser.reportTokens();
}
- protected ConfigurationParser getConfigurationParser(ServletConfig servletConfig)
+ private ConfigurationParser getConfigurationParser(ServletConfig servletConfig)
{
ConfigurationParser parser = null;
- Class parserClass = null;
+ Class parserClass;
String className = null;
// Check for Custom Parser Specification
@@ -175,7 +175,7 @@ public class FlexConfigurationManager implements ConfigurationManager
*
* @param servletConfig configuration
*/
- protected void setupConfigurationPathAndResolver(ServletConfig servletConfig)
+ private void setupConfigurationPathAndResolver(ServletConfig servletConfig)
{
if (servletConfig != null)
{
@@ -229,7 +229,7 @@ public class FlexConfigurationManager implements ConfigurationManager
}
- protected void verifyMinimumJavaVersion() throws ConfigurationException
+ private void verifyMinimumJavaVersion() throws ConfigurationException
{
try
{
@@ -262,7 +262,7 @@ public class FlexConfigurationManager implements ConfigurationManager
}
else if (third == 2)
{
- if ((vendor != null) && (vendor.indexOf("Sun") != -1))
+ if ((vendor != null) && vendor.contains("Sun"))
{
// test at least 1.4.2_06 on Sun
int fourth = Integer.parseInt(split[3]);
@@ -284,7 +284,7 @@ public class FlexConfigurationManager implements ConfigurationManager
{
ConfigurationException cx = new ConfigurationException();
- if ((vendor != null) && (vendor.indexOf("Sun") != -1))
+ if ((vendor != null) && vendor.contains("Sun"))
{
// The minimum required Java version was not found. Please install JDK 1.4.2_06 or above. Current version is XX.
cx.setMessage(10139, new Object[] { System.getProperty("java.version")});
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/config/MessagingConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/config/MessagingConfiguration.java b/core/src/main/java/flex/messaging/config/MessagingConfiguration.java
index 70987a2..b73222b 100644
--- a/core/src/main/java/flex/messaging/config/MessagingConfiguration.java
+++ b/core/src/main/java/flex/messaging/config/MessagingConfiguration.java
@@ -591,14 +591,6 @@ public class MessagingConfiguration implements ServicesConfiguration
// Only set the DeserializationValidator types for now.
if (validator instanceof DeserializationValidator)
{
- // there can only be one deserialization validator, throw an error if there is more than one.
- DeserializationValidator existingValidator = broker.getDeserializationValidator();
- if (existingValidator != null)
- {
- ConfigurationException cx = new ConfigurationException();
- cx.setMessage(11400, new Object[]{existingValidator.getClass().getCanonicalName(), className});
- throw cx;
- }
DeserializationValidator deserializationValidator = (DeserializationValidator)validator;
deserializationValidator.initialize(null, settings.getProperties());
broker.setDeserializationValidator(deserializationValidator);
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/config/ServerConfigurationParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/config/ServerConfigurationParser.java b/core/src/main/java/flex/messaging/config/ServerConfigurationParser.java
index e8eb1a9..c9134b5 100644
--- a/core/src/main/java/flex/messaging/config/ServerConfigurationParser.java
+++ b/core/src/main/java/flex/messaging/config/ServerConfigurationParser.java
@@ -1867,8 +1867,6 @@ public abstract class ServerConfigurationParser extends AbstractConfigurationPar
{
Node validatorsNode = selectSingleNode(root, VALIDATORS_ELEMENT);
if (validatorsNode == null) {
- // Default to the ClassDeserializationValidator
- defaultValidator();
return;
}
@@ -1882,21 +1880,9 @@ public abstract class ServerConfigurationParser extends AbstractConfigurationPar
Node validator = validators.item(i);
validator(validator);
}
- } else {
- // Default to the ClassDeserializationValidator
- defaultValidator();
}
}
- /**
- * Initialize a efault validator that protects BlazeDS against the most obvious attacks.
- */
- private void defaultValidator() {
- ValidatorSettings validatorSettings = new ValidatorSettings();
- validatorSettings.setClassName(ClassDeserializationValidator.class.getName());
- ((MessagingConfiguration)config).addValidatorSettings(validatorSettings);
- }
-
private void validator(Node validator)
{
// Validation
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/io/SerializationContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/io/SerializationContext.java b/core/src/main/java/flex/messaging/io/SerializationContext.java
index 64196cc..90b421d 100644
--- a/core/src/main/java/flex/messaging/io/SerializationContext.java
+++ b/core/src/main/java/flex/messaging/io/SerializationContext.java
@@ -26,8 +26,7 @@ import java.io.Serializable;
* A simple context to get settings from an endpoint to a deserializer
* or serializer.
*/
-public class SerializationContext implements Serializable, Cloneable
-{
+public class SerializationContext implements Serializable, Cloneable {
static final long serialVersionUID = -3020985035377116475L;
// Endpoint serialization configuration flags
@@ -54,7 +53,7 @@ public class SerializationContext implements Serializable, Cloneable
* Provides a way to control whether small messages should be sent even
* if the client can support them. If set to false, small messages
* will not be sent.
- *
+ * <p>
* The default is true.
*/
public boolean enableSmallMessages = true;
@@ -63,10 +62,10 @@ public class SerializationContext implements Serializable, Cloneable
* Determines whether type information will be used to instantiate a new instance.
* If set to false, types will be deserialized as flex.messaging.io.ASObject instances
* with type information retained but not used to create an instance.
- *
+ * <p>
* Note that types in the flex.* package (and any subpackage) will always be
* instantiated.
- *
+ * <p>
* The default is true.
*/
public boolean instantiateTypes = true;
@@ -76,7 +75,7 @@ public class SerializationContext implements Serializable, Cloneable
// How deep level of nest object in the object graph that we support
public int maxObjectNestLevel = 512;
-
+
// How deep level of nest collection objects in the object graph that we support
// Similarly like how many dimensional matrix that we support for serialization.
public int maxCollectionNestLevel = 15;
@@ -99,8 +98,9 @@ public class SerializationContext implements Serializable, Cloneable
/**
* The default constructor.
*/
- public SerializationContext()
- {
+ public SerializationContext() {
+ // Initialize the default validator.
+ deserializationValidator = new ClassDeserializationValidator();
}
/**
@@ -108,8 +108,7 @@ public class SerializationContext implements Serializable, Cloneable
*
* @return The deserializer class.
*/
- public Class getDeserializerClass()
- {
+ public Class getDeserializerClass() {
return deserializer;
}
@@ -118,8 +117,7 @@ public class SerializationContext implements Serializable, Cloneable
*
* @param c The deserializer class.
*/
- public void setDeserializerClass(Class c)
- {
+ public void setDeserializerClass(Class c) {
deserializer = c;
}
@@ -128,8 +126,7 @@ public class SerializationContext implements Serializable, Cloneable
*
* @return The serializer class.
*/
- public Class getSerializerClass()
- {
+ public Class getSerializerClass() {
return serializer;
}
@@ -138,8 +135,7 @@ public class SerializationContext implements Serializable, Cloneable
*
* @param c The serializer class.
*/
- public void setSerializerClass(Class c)
- {
+ public void setSerializerClass(Class c) {
serializer = c;
}
@@ -148,16 +144,13 @@ public class SerializationContext implements Serializable, Cloneable
*
* @return A new message deserializer instance.
*/
- public MessageDeserializer newMessageDeserializer()
- {
+ public MessageDeserializer newMessageDeserializer() {
Class deserializerClass = getDeserializerClass();
- if (deserializerClass == null)
- {
+ if (deserializerClass == null) {
deserializerClass = ClassUtil.createClass("flex.messaging.io.amf.AmfMessageDeserializer");
this.setDeserializerClass(deserializerClass);
}
- MessageDeserializer deserializer = (MessageDeserializer)ClassUtil.createDefaultInstance(deserializerClass, MessageDeserializer.class);
- return deserializer;
+ return (MessageDeserializer) ClassUtil.createDefaultInstance(deserializerClass, MessageDeserializer.class);
}
/**
@@ -165,16 +158,13 @@ public class SerializationContext implements Serializable, Cloneable
*
* @return A new message serializer instance.
*/
- public MessageSerializer newMessageSerializer()
- {
+ public MessageSerializer newMessageSerializer() {
Class serializerClass = getSerializerClass();
- if (serializerClass == null)
- {
+ if (serializerClass == null) {
serializerClass = ClassUtil.createClass("flex.messaging.io.amf.AmfMessageSerializer");
this.setSerializerClass(serializerClass);
}
- MessageSerializer serializer = (MessageSerializer)ClassUtil.createDefaultInstance(serializerClass, MessageSerializer.class);
- return serializer;
+ return (MessageSerializer) ClassUtil.createDefaultInstance(serializerClass, MessageSerializer.class);
}
/**
@@ -182,8 +172,7 @@ public class SerializationContext implements Serializable, Cloneable
*
* @return The deserialization validator.
*/
- public DeserializationValidator getDeserializationValidator()
- {
+ public DeserializationValidator getDeserializationValidator() {
return deserializationValidator;
}
@@ -192,20 +181,15 @@ public class SerializationContext implements Serializable, Cloneable
*
* @param deserializationValidator The deserialization validator.
*/
- public void setDeserializationValidator(DeserializationValidator deserializationValidator)
- {
+ public void setDeserializationValidator(DeserializationValidator deserializationValidator) {
this.deserializationValidator = deserializationValidator;
}
@Override
- public Object clone()
- {
- try
- {
+ public Object clone() {
+ try {
return super.clone();
- }
- catch (CloneNotSupportedException e)
- {
+ } catch (CloneNotSupportedException e) {
// this should never happen since this class extends object
// but just in case revert to manual clone
SerializationContext context = new SerializationContext();
@@ -244,57 +228,52 @@ public class SerializationContext implements Serializable, Cloneable
/**
* Establishes a SerializationContext for the current thread.
* Users are not expected to call this function.
+ *
* @param context The current SerializationContext.
*/
- public static void setSerializationContext(SerializationContext context)
- {
- if (context == null)
+ public static void setSerializationContext(SerializationContext context) {
+ if (context == null) {
contexts.remove();
- else
+ } else {
contexts.set(context);
+ }
}
/**
* @return The current thread's SerializationContext.
*/
- public static SerializationContext getSerializationContext()
- {
+ public static SerializationContext getSerializationContext() {
SerializationContext sc = contexts.get();
- if (sc == null)
- {
+ if (sc == null) {
sc = new SerializationContext();
SerializationContext.setSerializationContext(sc);
}
return sc;
}
+
/**
* Clears out the thread local state after the request completes.
*/
- public static void clearThreadLocalObjects()
- {
- if (contexts != null)
- {
+ public static void clearThreadLocalObjects() {
+ if (contexts != null) {
contexts.remove();
}
}
/**
- *
* Create thread local storage.
*/
- public static void createThreadLocalObjects()
- {
- if (contexts == null)
- contexts = new ThreadLocal();
+ public static void createThreadLocalObjects() {
+ if (contexts == null) {
+ contexts = new ThreadLocal<SerializationContext>();
+ }
}
/**
- *
* Destroy thread local storage.
* Call ONLY on shutdown.
*/
- public static void releaseThreadLocalObjects()
- {
+ public static void releaseThreadLocalObjects() {
clearThreadLocalObjects();
contexts = null;
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/main/java/flex/messaging/validators/ClassDeserializationValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/flex/messaging/validators/ClassDeserializationValidator.java b/core/src/main/java/flex/messaging/validators/ClassDeserializationValidator.java
index ed2ac80..4bc0857 100644
--- a/core/src/main/java/flex/messaging/validators/ClassDeserializationValidator.java
+++ b/core/src/main/java/flex/messaging/validators/ClassDeserializationValidator.java
@@ -40,19 +40,21 @@ public class ClassDeserializationValidator implements DeserializationValidator {
public static final String PROPERTY_NAME_ATTR = "name";
private static final String[] DEFAULT_ALLOW_CLASSES = {
+ "flex.messaging.io.amf.ASObject",
"flex.messaging.io.amf.SerializedObject",
"flex.messaging.io.ArrayCollection",
- "flex.messaging.io.ObjectProxy",
- "flex.messaging.io.SerializationProxy",
+ "flex.messaging.io.ArrayList",
+ "flex.messaging.messages.AcknowledgeMessage",
"flex.messaging.messages.AcknowledgeMessageExt",
+ "flex.messaging.messages.AsyncMessage",
"flex.messaging.messages.AsyncMessageExt",
+ "flex.messaging.messages.CommandMessage",
"flex.messaging.messages.CommandMessageExt",
- "flex.data.messages.DataMessageExt",
- "flex.data.messages.ManagedRemotingMessageExt",
- "flex.data.messages.PagedMessageExt",
- "flex.data.messages.SequencedMessageExt",
- "flex.data.messages.UpdateCollectionMessageExt",
- "flex.data.ChangedItems",
+ "flex.messaging.messages.ErrorMessage",
+ "flex.messaging.messages.HTTPMessage",
+ "flex.messaging.messages.RemotingMessage",
+ "flex.messaging.messages.SOAPMessage",
+ "java.io.Externalizable",
"java.lang.Boolean",
"java.lang.Byte",
"java.lang.Character",
@@ -63,8 +65,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
"java.lang.Object",
"java.lang.Short",
"java.lang.String",
- "java.io.Externalizable",
+ "java.util.ArrayList",
"java.util.Date",
+ "java.util.HashMap",
"org.w3c.dom.Document",
"\\[B",
"\\[Ljava.lang.Object;"
@@ -94,6 +97,10 @@ public class ClassDeserializationValidator implements DeserializationValidator {
private Map<String, Pattern> disallowClassPatterns;
public ClassDeserializationValidator() {
+ // Apply default allow classes
+ for (String defaultAllowClassPattern : DEFAULT_ALLOW_CLASSES) {
+ addAllowClassPattern(defaultAllowClassPattern);
+ }
}
@@ -110,8 +117,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
*/
public void addAllowClassPattern(String classNamePattern) {
synchronized (lock) {
- if (allowClassPatterns == null)
+ if (allowClassPatterns == null) {
allowClassPatterns = new HashMap<String, Pattern>();
+ }
allowClassPatterns.put(classNamePattern, Pattern.compile(classNamePattern));
@@ -126,8 +134,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
*/
public void removeAllowClassPattern(String classNamePattern) {
synchronized (lock) {
- if (allowClassPatterns != null)
+ if (allowClassPatterns != null) {
allowClassPatterns.remove(classNamePattern);
+ }
clearClassCache();
}
@@ -140,8 +149,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
*/
public void addDisallowClassPattern(String classNamePattern) {
synchronized (lock) {
- if (disallowClassPatterns == null)
+ if (disallowClassPatterns == null) {
disallowClassPatterns = new HashMap<String, Pattern>();
+ }
disallowClassPatterns.put(classNamePattern, Pattern.compile(classNamePattern));
@@ -156,8 +166,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
*/
public void removeDisallowClassPattern(String classNamePattern) {
synchronized (lock) {
- if (disallowClassPatterns != null)
+ if (disallowClassPatterns != null) {
disallowClassPatterns.remove(classNamePattern);
+ }
clearClassCache();
}
@@ -201,16 +212,19 @@ public class ClassDeserializationValidator implements DeserializationValidator {
*/
public boolean validateCreation(Class<?> c) {
String className = c == null ? null : c.getName();
- if (className == null)
+ if (className == null) {
return true;
+ }
// First, check against the encountered disallow-classes list.
- if (disallowClasses != null && disallowClasses.contains(className))
+ if (disallowClasses != null && disallowClasses.contains(className)) {
return false;
+ }
// Then, check against the encountered allow-classes list.
- if (allowClasses != null && allowClasses.contains(className))
+ if (allowClasses != null && allowClasses.contains(className)) {
return true;
+ }
// Otherwise, the class was encountered for the first time, need to
// go through the disallow and allow class patterns list.
@@ -247,13 +261,9 @@ public class ClassDeserializationValidator implements DeserializationValidator {
* {@inheritDoc}
*/
public void initialize(String id, ConfigMap properties) {
- // Apply default allow classes
- for (String defaultAllowClassPattern : DEFAULT_ALLOW_CLASSES) {
- addAllowClassPattern(defaultAllowClassPattern);
- }
-
- if (properties == null || properties.size() == 0)
+ if (properties == null || properties.size() == 0) {
return;
+ }
// Process allow-classes.
ConfigMap allowedClassesMap = properties.getPropertyAsMap(PROPERTY_ALLOW_CLASSES, null);
@@ -288,21 +298,25 @@ public class ClassDeserializationValidator implements DeserializationValidator {
protected void addAllowClass(String className) {
synchronized (lock) {
- if (allowClasses == null)
+ if (allowClasses == null) {
allowClasses = new HashSet<String>();
+ }
- if (!allowClasses.contains(className))
+ if (!allowClasses.contains(className)) {
allowClasses.add(className);
+ }
}
}
protected void addDisallowClass(String className) {
synchronized (lock) {
- if (disallowClasses == null)
+ if (disallowClasses == null) {
disallowClasses = new HashSet<String>();
+ }
- if (!disallowClasses.contains(className))
+ if (!disallowClasses.contains(className)) {
disallowClasses.add(className);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/test/java/flex/messaging/io/amf/validators/AmfDeserializationValidatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/flex/messaging/io/amf/validators/AmfDeserializationValidatorTest.java b/core/src/test/java/flex/messaging/io/amf/validators/AmfDeserializationValidatorTest.java
index 4fad1b0..f1114e4 100644
--- a/core/src/test/java/flex/messaging/io/amf/validators/AmfDeserializationValidatorTest.java
+++ b/core/src/test/java/flex/messaging/io/amf/validators/AmfDeserializationValidatorTest.java
@@ -95,7 +95,7 @@ public class AmfDeserializationValidatorTest extends TestCase
URL resource = ClassLoader.getSystemResource(sample);
URI uri = new URI(resource.toString());
File testData = new File(uri.getPath());
- String testDataLocation = testData.getCanonicalPath();
+ String testDataLocation = testData.getCanonicalPath();
// Generate sample AMF request from the data file.
PipedOutputStream pout = new PipedOutputStream();
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/core/src/test/java/flex/messaging/io/amfx/AmfxSerializationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/flex/messaging/io/amfx/AmfxSerializationTest.java b/core/src/test/java/flex/messaging/io/amfx/AmfxSerializationTest.java
index 1e6965a..eb3b32b 100644
--- a/core/src/test/java/flex/messaging/io/amfx/AmfxSerializationTest.java
+++ b/core/src/test/java/flex/messaging/io/amfx/AmfxSerializationTest.java
@@ -16,6 +16,7 @@
*/
package flex.messaging.io.amfx;
+import flex.messaging.validators.ClassDeserializationValidator;
import junit.framework.TestCase;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -69,7 +70,10 @@ public class AmfxSerializationTest extends TestCase
protected void setUp() throws Exception
{
super.setUp();
+ ClassDeserializationValidator classDeserializationValidator = new ClassDeserializationValidator();
+ classDeserializationValidator.addAllowClassPattern("flex.messaging.io.amfx.testtypes.*");
serializationContext = new SerializationContext();
+ serializationContext.setDeserializationValidator(classDeserializationValidator);
SerializationContext.setSerializationContext(serializationContext);
//trace = new AmfTrace();
}
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/remoting/src/main/java/flex/messaging/services/RemotingService.java
----------------------------------------------------------------------
diff --git a/remoting/src/main/java/flex/messaging/services/RemotingService.java b/remoting/src/main/java/flex/messaging/services/RemotingService.java
index c018ace..b817c45 100755
--- a/remoting/src/main/java/flex/messaging/services/RemotingService.java
+++ b/remoting/src/main/java/flex/messaging/services/RemotingService.java
@@ -164,10 +164,12 @@ public class RemotingService extends AbstractService
{
RemotingMessage message = (RemotingMessage)msg;
RemotingDestination destination = (RemotingDestination)getDestination(msg);
- RemotingDestinationControl destinationControl = (destination.isManaged()) ? (RemotingDestinationControl)destination.getControl() : null;
if (destination != null)
{
+ RemotingDestinationControl destinationControl = (destination.isManaged()) ?
+ (RemotingDestinationControl) destination.getControl() : null;
+
ServiceAdapter adapter = destination.getAdapter();
long startTime = 0;
if (destinationControl != null)
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/11b0aa13/remoting/src/test/java/flex/messaging/io/amf/client/AMFConnectionIT.java
----------------------------------------------------------------------
diff --git a/remoting/src/test/java/flex/messaging/io/amf/client/AMFConnectionIT.java b/remoting/src/test/java/flex/messaging/io/amf/client/AMFConnectionIT.java
index b2d3bef..230005c 100644
--- a/remoting/src/test/java/flex/messaging/io/amf/client/AMFConnectionIT.java
+++ b/remoting/src/test/java/flex/messaging/io/amf/client/AMFConnectionIT.java
@@ -17,35 +17,33 @@
package flex.messaging.io.amf.client;
-import java.net.HttpURLConnection;
-import java.net.InetSocketAddress;
-import java.net.Proxy;
-
-import flex.messaging.util.TestServerWrapper;
-import junit.extensions.TestSetup;
-import org.junit.Assert;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import remoting.amfclient.ClientCustomType;
-
import flex.messaging.MessageException;
-import flex.messaging.messages.RemotingMessage;
+import flex.messaging.io.MessageIOConstants;
+import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.ASObject;
import flex.messaging.io.amf.AmfTrace;
import flex.messaging.io.amf.client.AMFConnection.HttpResponseInfo;
import flex.messaging.io.amf.client.exceptions.ClientStatusException;
import flex.messaging.io.amf.client.exceptions.ServerStatusException;
-import flex.messaging.io.MessageIOConstants;
+import flex.messaging.messages.RemotingMessage;
+import flex.messaging.util.TestServerWrapper;
+import flex.messaging.validators.ClassDeserializationValidator;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import remoting.amfclient.ClientCustomType;
+
+import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
/**
* JUnit tests for AMFConnection. Note that most of the tests require a running
* server with the specified destination.
*/
-public class AMFConnectionIT extends TestCase
-{
+public class AMFConnectionIT {
private static final String DEFAULT_DESTINATION_ID = "amfConnectionTestService";
private static final String DEFAULT_METHOD_NAME = "echoString";
private static final String DEFAULT_METHOD_ARG = "echo me";
@@ -57,102 +55,51 @@ public class AMFConnectionIT extends TestCase
private static TestServerWrapper serverWrapper;
private static int serverPort;
+ private static SerializationContext serializationContext;
- /**
- * Given a remote method name, returns the AMF connection call needed using
- * the default destination id.
- */
- private static String getOperationCall(String method)
- {
- return DEFAULT_DESTINATION_ID + "." + method;
- }
+ @BeforeClass
+ public static void setup() {
+ serverWrapper = new TestServerWrapper();
+ serverPort = serverWrapper.startServer("classpath:/WEB-INF/flex/services-config.xml");
+ if (serverPort == -1) {
+ Assert.fail("Couldn't start server process");
+ }
- protected String getConnectionUrl() {
- return String.format(DEFAULT_URL, serverPort);
- }
+ AMFConnection.registerAlias(
+ "remoting.amfclient.ServerCustomType" /* server type */,
+ "remoting.amfclient.ClientCustomType" /* client type */);
+ serializationContext = SerializationContext.getSerializationContext();
+ ClassDeserializationValidator deserializationValidator =
+ (ClassDeserializationValidator) serializationContext.getDeserializationValidator();
+ deserializationValidator.addAllowClassPattern("remoting.amfclient.*");
+ }
- public AMFConnectionIT(String name)
- {
- super(name);
- }
-
- public static Test suite()
- {
- //TestSuite suite = new TestSuite(AMFConnectionIT.class);
- TestSuite suite = new TestSuite();
- suite.addTest(new AMFConnectionIT("testConnect"));
- suite.addTest(new AMFConnectionIT("testConnectAndClose"));
- suite.addTest(new AMFConnectionIT("testConnectBadUrl"));
- suite.addTest(new AMFConnectionIT("testCallMultipleTimes"));
- suite.addTest(new AMFConnectionIT("testCallNoConnect"));
- suite.addTest(new AMFConnectionIT("testCallNoConnectStringMsg"));
- suite.addTest(new AMFConnectionIT("testCallUnreachableConnectUrl"));
- suite.addTest(new AMFConnectionIT("testCallNonexistantMethod"));
- suite.addTest(new AMFConnectionIT("testHttpResponseInfoWithNonexistantMethod"));
- suite.addTest(new AMFConnectionIT("testCloseNoConnect"));
- suite.addTest(new AMFConnectionIT("testSetGetObjectEncoding"));
- suite.addTest(new AMFConnectionIT("testSetGetDefaultObjectEncoding"));
- suite.addTest(new AMFConnectionIT("testSetGetAMFHeaderProcessor"));
- suite.addTest(new AMFConnectionIT("testAddRemoveAMFHeaderTwoParam"));
- suite.addTest(new AMFConnectionIT("testAddRemoveAMFHeader"));
- suite.addTest(new AMFConnectionIT("testAddRemoveAllAMFHeaders"));
- suite.addTest(new AMFConnectionIT("testAddRemoveHTTPRequestHeader"));
- suite.addTest(new AMFConnectionIT("testAddRemoveAllHTTPRequestHeaders"));
- suite.addTest(new AMFConnectionIT("testRemoveAMFHeader"));
- suite.addTest(new AMFConnectionIT("testRemoveAllAMFHeaders"));
- suite.addTest(new AMFConnectionIT("testRemoveHTTPRequestHeader"));
- suite.addTest(new AMFConnectionIT("testRemoveAllHTTPRequestHeaders"));
- suite.addTest(new AMFConnectionIT("testInstantiateTypes"));
- suite.addTest(new AMFConnectionIT("testSetGetAMFTrace"));
- suite.addTest(new AMFConnectionIT("testHTTPProxy"));
-
- return new TestSetup(suite) {
- protected void setUp() throws Exception {
- serverWrapper = new TestServerWrapper();
- serverPort = serverWrapper.startServer("classpath:/WEB-INF/flex/services-config.xml");
- if(serverPort == -1) {
- Assert.fail("Couldn't start server process");
- }
- AMFConnection.registerAlias(
- "remoting.amfclient.ServerCustomType" /* server type */,
- "remoting.amfclient.ClientCustomType" /* client type */);
- }
- protected void tearDown() throws Exception {
- serverWrapper.stopServer();
- serverWrapper = null;
- }
- };
+ @AfterClass
+ public static void teardown() {
+ serverWrapper.stopServer();
+ serverWrapper = null;
}
// Not a test, just an example to show how to use AMFConnection.
- public void example()
- {
+ public void example() {
// Create the AMF connection.
AMFConnection amfConnection = new AMFConnection();
// Connect to the remote url.
- try
- {
- amfConnection.connect(getConnectionUrl());
- }
- catch (ClientStatusException cse)
- {
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
+ } catch (ClientStatusException cse) {
return;
}
// Make a remoting call and retrieve the result.
- try
- {
+ try {
Object result = amfConnection.call(DEFAULT_AMF_OPERATION, DEFAULT_METHOD_ARG);
Assert.assertEquals(DEFAULT_METHOD_ARG, result);
- }
- catch (ClientStatusException cse)
- {
+ } catch (ClientStatusException cse) {
// Ignore.
- }
- catch (ServerStatusException sse)
- {
+ } catch (ServerStatusException sse) {
// Ignore.
}
@@ -160,282 +107,209 @@ public class AMFConnectionIT extends TestCase
amfConnection.close();
}
- public void testConnect()
- {
+ @Test
+ public void testConnect() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testConnectAndClose()
- {
+ @Test
+ public void testConnectAndClose() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
Assert.assertEquals(null, amfConnection.getUrl());
}
}
- public void testConnectBadUrl()
- {
+ @Test
+ public void testConnectBadUrl() {
String badUrl = "badUrl";
AMFConnection amfConnection = new AMFConnection();
- try
- {
+ try {
amfConnection.connect(badUrl);
- fail("ClientStatusException expected");
- }
- catch (ClientStatusException cse)
- {
+ Assert.fail("ClientStatusException expected");
+ } catch (ClientStatusException cse) {
Assert.assertEquals(ClientStatusException.AMF_CONNECT_FAILED_CODE, cse.getCode());
- }
- finally
- {
+ } finally {
amfConnection.close();
}
}
- public void testCallMultipleTimes()
- {
+ @Test
+ public void testCallMultipleTimes() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
}
// Make a remoting call and retrieve the result.
- try
- {
- for (int i = 1; i < 4; i++)
- {
+ try {
+ for (int i = 1; i < 4; i++) {
String stringToEcho = DEFAULT_METHOD_ARG + i;
Object result = amfConnection.call(DEFAULT_AMF_OPERATION, stringToEcho);
Assert.assertEquals(stringToEcho, result);
}
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfConnection.close();
}
}
- public void testCallNoConnect()
- {
+ @Test
+ public void testCallNoConnect() {
AMFConnection amfConnection = new AMFConnection();
// Make a remoting call without connect.
- try
- {
+ try {
Object result = amfConnection.call(DEFAULT_AMF_OPERATION, DEFAULT_METHOD_ARG);
Assert.assertEquals(DEFAULT_METHOD_ARG, result);
- }
- catch (ClientStatusException cse)
- {
+ } catch (ClientStatusException cse) {
Assert.assertEquals(ClientStatusException.AMF_CALL_FAILED_CODE, cse.getCode());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfConnection.close();
}
}
- public void testCallNoConnectStringMsg()
- {
+ @Test
+ public void testCallNoConnectStringMsg() {
AMFConnection amfConnection = new AMFConnection();
// Make a remoting call without connect.
- try
- {
+ try {
Object result = amfConnection.call(DEFAULT_AMF_OPERATION, DEFAULT_METHOD_ARG);
Assert.assertEquals(DEFAULT_METHOD_ARG, result);
- }
- catch (ClientStatusException cse)
- {
+ } catch (ClientStatusException cse) {
Assert.assertEquals(ClientStatusException.AMF_CALL_FAILED_CODE, cse.getCode());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfConnection.close();
}
}
- public void testCallUnreachableConnectUrl()
- {
+ @Test
+ public void testCallUnreachableConnectUrl() {
String unreachableUrl = "http://localhost:8400/team/messagebroker/unreachable";
AMFConnection amfConnection = new AMFConnection();
- try
- {
+ try {
// Connect does not actually connect but simply sets the url.
amfConnection.connect(unreachableUrl);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
}
// Make a remoting call and retrieve the result.
- try
- {
+ try {
Object result = amfConnection.call(DEFAULT_AMF_OPERATION, DEFAULT_METHOD_ARG);
Assert.assertEquals(DEFAULT_METHOD_ARG, result);
- }
- catch (ClientStatusException cse)
- {
+ } catch (ClientStatusException cse) {
Assert.assertEquals(ClientStatusException.AMF_CALL_FAILED_CODE, cse.getCode());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfConnection.close();
}
}
- public void testCallNonexistantMethod()
- {
+ @Test
+ public void testCallNonexistantMethod() {
String method = "nonExistantMethod";
- try
- {
- internalTestCall(getOperationCall(method), "Wombat", new CallResultHandler(){
- public void onResult(Object result)
- {
- fail("Unexcepted result: " + result);
+ try {
+ internalTestCall(getOperationCall(method), "Wombat", new CallResultHandler() {
+ public void onResult(Object result) {
+ Assert.fail("Unexcepted result: " + result);
}
});
- }
- catch (ServerStatusException sse)
- {
- ASObject status = (ASObject)sse.getData();
- String code = (String)status.get("code");
+ } catch (ServerStatusException sse) {
+ ASObject status = (ASObject) sse.getData();
+ String code = (String) status.get("code");
Assert.assertEquals(MessageException.CODE_SERVER_RESOURCE_UNAVAILABLE, code);
HttpResponseInfo info = sse.getHttpResponseInfo();
// AMF status messages are reported as HTTP_OK still.
Assert.assertEquals(HttpURLConnection.HTTP_OK, info.getResponseCode());
Assert.assertEquals("OK", info.getResponseMessage());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
}
}
- public void testHttpResponseInfoWithNonexistantMethod()
- {
+ @Test
+ public void testHttpResponseInfoWithNonexistantMethod() {
String method = "nonExistantMethod";
final ClientCustomType methodArg = new ClientCustomType();
methodArg.setId(1);
- try
- {
- internalTestCall(getOperationCall(method), methodArg, new CallResultHandler(){
- public void onResult(Object result)
- {
- fail("Unexcepted result: " + result);
+ try {
+ internalTestCall(getOperationCall(method), methodArg, new CallResultHandler() {
+ public void onResult(Object result) {
+ Assert.fail("Unexcepted result: " + result);
}
});
- }
- catch (ServerStatusException sse)
- {
+ } catch (ServerStatusException sse) {
HttpResponseInfo info = sse.getHttpResponseInfo();
// AMF status messages are reported as HTTP_OK still.
Assert.assertEquals(HttpURLConnection.HTTP_OK, info.getResponseCode());
Assert.assertEquals("OK", info.getResponseMessage());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
}
}
- public void testCloseNoConnect()
- {
+ @Test
+ public void testCloseNoConnect() {
AMFConnection amfConnection = new AMFConnection();
// Closing with no connection or call.
- try
- {
+ try {
amfConnection.close();
Assert.assertEquals(null, amfConnection.getUrl());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
}
}
- public void testSetGetObjectEncoding()
- {
+ @Test
+ public void testSetGetObjectEncoding() {
int retAMF;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
amfConnection.setObjectEncoding(MessageIOConstants.AMF0);
retAMF = amfConnection.getObjectEncoding();
Assert.assertEquals(MessageIOConstants.AMF0, retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testSetGetDefaultObjectEncoding()
- {
+ @Test
+ public void testSetGetDefaultObjectEncoding() {
int retAMF;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
AMFConnection.setDefaultObjectEncoding(MessageIOConstants.AMF3);
retAMF = AMFConnection.getDefaultObjectEncoding();
Assert.assertEquals(MessageIOConstants.AMF3, retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
@@ -444,233 +318,179 @@ public class AMFConnectionIT extends TestCase
* There doesn't seem to be a single implementation of AMFHeaderProcessor therefore this test
* is pretty useless.
*/
- public void testSetGetAMFHeaderProcessor()
- {
- AMFHeaderProcessor setAMF = null;
- AMFHeaderProcessor retAMF;
+ @Test
+ public void testSetGetAMFHeaderProcessor() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.setAMFHeaderProcessor(setAMF);
- retAMF = amfConnection.getAMFHeaderProcessor();
- Assert.assertEquals(setAMF, retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ amfConnection.setAMFHeaderProcessor(null);
+ AMFHeaderProcessor retAMF = amfConnection.getAMFHeaderProcessor();
+ Assert.assertNull(retAMF);
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testAddRemoveAMFHeaderTwoParam()
- {
+ @Test
+ public void testAddRemoveAMFHeaderTwoParam() {
boolean retAMF;
Object val = 1;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.addAmfHeader(FOO_STRING,val);
+ amfConnection.addAmfHeader(FOO_STRING, val);
retAMF = amfConnection.removeAmfHeader(FOO_STRING);
Assert.assertTrue(retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testAddRemoveAMFHeader()
- {
+ @Test
+ public void testAddRemoveAMFHeader() {
boolean retAMF;
Object val = 1;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.addAmfHeader(FOO_STRING,true,val);
+ amfConnection.addAmfHeader(FOO_STRING, true, val);
retAMF = amfConnection.removeAmfHeader(FOO_STRING);
Assert.assertTrue(retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testAddRemoveAllAMFHeaders()
- {
+ @Test
+ public void testAddRemoveAllAMFHeaders() {
Object val1 = 1;
Object val2 = 2;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.addAmfHeader(FOO_STRING,true,val1);
- amfConnection.addAmfHeader(BAR_STRING,true,val2);
+ amfConnection.addAmfHeader(FOO_STRING, true, val1);
+ amfConnection.addAmfHeader(BAR_STRING, true, val2);
amfConnection.removeAllAmfHeaders();
Assert.assertTrue(true);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testAddRemoveHTTPRequestHeader()
- {
+ @Test
+ public void testAddRemoveHTTPRequestHeader() {
boolean retHttp;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.addHttpRequestHeader(FOO_STRING,BAR_STRING);
+ amfConnection.addHttpRequestHeader(FOO_STRING, BAR_STRING);
retHttp = amfConnection.removeHttpRequestHeader(FOO_STRING);
Assert.assertTrue(retHttp);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testAddRemoveAllHTTPRequestHeaders()
- {
+ @Test
+ public void testAddRemoveAllHTTPRequestHeaders() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
- amfConnection.addHttpRequestHeader(FOO_STRING,BAR_STRING);
- amfConnection.addHttpRequestHeader(BAR_STRING,FOO_STRING);
+ amfConnection.addHttpRequestHeader(FOO_STRING, BAR_STRING);
+ amfConnection.addHttpRequestHeader(BAR_STRING, FOO_STRING);
amfConnection.removeAllHttpRequestHeaders();
Assert.assertTrue(true);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testRemoveAMFHeader()
- {
+ @Test
+ public void testRemoveAMFHeader() {
boolean retAMF;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
retAMF = amfConnection.removeAmfHeader(FOO_STRING);
Assert.assertFalse(retAMF);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testRemoveAllAMFHeaders()
- {
+ @Test
+ public void testRemoveAllAMFHeaders() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
amfConnection.removeAllAmfHeaders();
Assert.assertTrue(true);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testRemoveHTTPRequestHeader()
- {
+ @Test
+ public void testRemoveHTTPRequestHeader() {
boolean retHttp;
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
retHttp = amfConnection.removeHttpRequestHeader(FOO_STRING);
Assert.assertFalse(retHttp);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
- public void testRemoveAllHTTPRequestHeaders()
- {
+ @Test
+ public void testRemoveAllHTTPRequestHeaders() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
- amfConnection.connect(getConnectionUrl());
+ try {
+ amfConnection.connect(getConnectionUrl(), serializationContext);
Assert.assertEquals(getConnectionUrl(), amfConnection.getUrl());
amfConnection.removeAllHttpRequestHeaders();
Assert.assertTrue(true);
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } finally {
amfConnection.close();
}
}
-
- public void testInstantiateTypes()
- {
+ @Test
+ public void testInstantiateTypes() {
String method = "getObject2";
- try
- {
+ try {
AMFConnection amfConnection = new AMFConnection();
- amfConnection.connect(getConnectionUrl());
+ amfConnection.connect(getConnectionUrl(), serializationContext);
// First, make sure we get the strong type.
Object result = amfConnection.call(getOperationCall(method));
@@ -681,20 +501,17 @@ public class AMFConnectionIT extends TestCase
result = amfConnection.call(getOperationCall(method));
Assert.assertTrue(!(result instanceof ClientCustomType));
amfConnection.close();
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
}
}
- public void testSetGetAMFTrace()
- {
+ @Test
+ public void testSetGetAMFTrace() {
AMFConnection amfConnection = new AMFConnection();
- try
- {
+ try {
AmfTrace trace = new AmfTrace();
- amfConnection.connect(getConnectionUrl());
+ amfConnection.connect(getConnectionUrl(), serializationContext);
amfConnection.setAmfTrace(trace);
String stringToEcho = DEFAULT_METHOD_ARG + 1;
@@ -702,30 +519,22 @@ public class AMFConnectionIT extends TestCase
Assert.assertEquals(stringToEcho, result);
if (trace.toString().length() > 0) Assert.assertTrue(true);
- else fail("AmfTrace did not get anything: " + trace.toString() + " " + trace.toString().length());
+ else Assert.fail("AmfTrace did not get anything: " + trace.toString() + " " + trace.toString().length());
amfConnection.close();
-
- }
- catch (ClientStatusException cse)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + cse);
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (ClientStatusException cse) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + cse);
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfConnection.close();
}
}
- public void testHTTPProxy()
- {
+ @Test
+ public void testHTTPProxy() {
AMFConnection amfconn = new AMFConnection();
- try
- {
+ try {
amfconn.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8888)));
amfconn.connect("http://localhost:8400/team/messagebroker/amf");
RemotingMessage call = new RemotingMessage();
@@ -736,41 +545,50 @@ public class AMFConnectionIT extends TestCase
call.setOperation("echo");
call.setBody("hello");
amfconn.call("foo", call);
- fail("ClientStatusException expected");
- }
- catch (ClientStatusException cse)
- {
+ Assert.fail("ClientStatusException expected");
+ } catch (ClientStatusException cse) {
Assert.assertEquals(ClientStatusException.AMF_CALL_FAILED_CODE, cse.getCode());
- }
- catch (Exception e)
- {
- fail(UNEXPECTED_EXCEPTION_STRING + e);
- }
- finally
- {
+ } catch (Exception e) {
+ Assert.fail(UNEXPECTED_EXCEPTION_STRING + e);
+ } finally {
amfconn.close();
}
}
+ ///////////////////////////////////////////////////////////////////////////////
+ // Utility methods
+ ///////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * Given a remote method name, returns the AMF connection call needed using
+ * the default destination id.
+ */
+ private static String getOperationCall(String method) {
+ return DEFAULT_DESTINATION_ID + "." + method;
+ }
+
+ private static String getConnectionUrl() {
+ return String.format(DEFAULT_URL, serverPort);
+ }
+
// A simple interface to handle AMF call results.
- private interface CallResultHandler
- {
+ private interface CallResultHandler {
void onResult(Object result);
}
// Helper method used by JUnit tests to pass in an operation and method argument
// When the AMF call returns, CallResultHandler.onResult is called to Assert things.
- private void internalTestCall(String operation, Object methodArg, CallResultHandler resultHandler) throws ClientStatusException, ServerStatusException
- {
+ private void internalTestCall(String operation, Object methodArg, CallResultHandler resultHandler) throws ClientStatusException, ServerStatusException {
AMFConnection amfConnection = new AMFConnection();
// Connect.
- amfConnection.connect(getConnectionUrl());
+ amfConnection.connect(getConnectionUrl(), serializationContext);
// Make a remoting call and retrieve the result.
Object result;
- if (methodArg == null)
+ if (methodArg == null) {
result = amfConnection.call(operation);
- else
+ } else {
result = amfConnection.call(operation, methodArg);
+ }
resultHandler.onResult(result);
amfConnection.close();
}