messagecontextselfmanageddatatest.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,580 行 · 第 1/4 页
JAVA
1,580 行
restoredMessageContext = true;
// VERY IMPORTANT: replace testcase's messagecontext object with the new restored one
mc = msgContext2;
log.debug(title + "....restored message context .....");
}
catch (Exception ex2) {
if (savedMessageContext != true) {
log.debug(title + "Error with saving message context = [" +
ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
ex2.printStackTrace();
} else {
log.debug(title + "Error with restoring message context = [" +
ex2.getClass().getName() + " : " + ex2.getMessage() + "]");
ex2.printStackTrace();
}
}
// if the save/restore of the message context succeeded,
// then don't keep the temporary file around
boolean removeTmpFile = savedMessageContext && restoredMessageContext;
if (removeTmpFile) {
try {
theFile.delete();
}
catch (Exception e) {
// just absorb it
}
}
}
return msgContext2;
}
/**
* Gets the ID associated with the handler object.
*
* @param o The handler object
* @return The ID associated with the handler,
* -1 otherwise
*/
private int getHandlerID(Object o) {
int id = -1;
if (o instanceof TempHandler01) {
id = ((TempHandler01) o).getID();
} else if (o instanceof TempHandler02) {
id = ((TempHandler02) o).getID();
} else if (o instanceof TempHandler03) {
id = ((TempHandler03) o).getID();
} else if (o instanceof TempHandler04) {
id = ((TempHandler04) o).getID();
}
return id;
}
/**
* Check the handler objects to see if they are equivalent.
*
* @param o1 The first handler
* @param o2 The second handler
* @return TRUE if the handler objects are equivalent,
* FALSE otherwise
*/
private boolean compareHandlers(Object o1, Object o2) {
if ((o1 == null) && (o2 == null)) {
return true;
}
if ((o1 != null) && (o2 != null)) {
String c1 = o1.getClass().getName();
String c2 = o2.getClass().getName();
if (c1.equals(c2)) {
log.debug("MessagecontextSelfManagedDataTest::compareHandlers: class [" +
c1 + "] match ");
int id1 = getHandlerID(o1);
int id2 = getHandlerID(o2);
if (id1 == id2) {
log.debug("MessagecontextSelfManagedDataTest::compareHandlers: id [" +
id1 + "] match");
return true;
} else {
log.debug("MessagecontextSelfManagedDataTest::compareHandlers: id1 [" + id1 +
"] != id2 [" + id2 + "] ");
return false;
}
} else {
log.debug("MessagecontextSelfManagedDataTest::compareHandlers: class1 [" +
c1 + "] != class2 [" + c2 + "] ");
return false;
}
}
return false;
}
/**
* Compare two phases.
*
* @param o1 The first phase object
* @param o2 The second phase object
* @return TRUE if the phases are equivalent,
* FALSE otherwise
*/
private boolean comparePhases(Object o1, Object o2) {
if ((o1 == null) && (o2 == null)) {
return true;
}
try {
if (((o1 != null) && (o2 != null))
&& ((o1 instanceof Phase) && (o2 instanceof Phase))
) {
Phase p1 = (Phase) o1;
Phase p2 = (Phase) o2;
ArrayList list1 = p1.getHandlers();
ArrayList list2 = p2.getHandlers();
if ((list1 == null) && (list2 == null)) {
return true;
}
if ((list1 != null) && (list2 != null)) {
int size1 = list1.size();
int size2 = list2.size();
if (size1 != size2) {
return false;
}
for (int j = 0; j < size1; j++) {
Object obj1 = list1.get(j);
Object obj2 = list2.get(j);
if ((obj1 == null) && (obj2 == null)) {
// ok
} else if ((obj1 != null) && (obj2 != null)) {
boolean check = false;
if (obj1 instanceof Phase) {
check = comparePhases(obj1, obj2);
} else {
// must be a handler
check = compareHandlers(obj1, obj2);
}
if (check == false) {
return false;
}
} else {
// mismatch
return false;
}
}
// if we got here, the comparison completed ok
// with a match
return true;
}
}
}
catch (Exception e) {
// some error
e.printStackTrace();
}
return false;
}
/*
private void comparePhases(Iterator it, ArrayList al)
{
int it_count = -1;
while (it.hasNext())
{
it_count++;
Handler handler = (Handler)it.next();
if (handler instanceof Phase)
{
comparePhases(((Phase)handler).getHandlers().iterator(), ((Phase)al.get(it_count)).getHandlers());
}
else
{
assertEquals(handler, (TempHandler02)al.get(it_count));
}
}
}
*/
//-------------------------------------------------------------------------
// internal handlers
//-------------------------------------------------------------------------
/*
* TempHandler01 simply sets and/or removes data from the MessageContext
* object.
*/
public class TempHandler01 extends AbstractHandler {
private int id = -2;
public TempHandler01() {
id = -1;
}
public TempHandler01(int id) {
this.id = id;
}
public int getID() {
return this.id;
}
public String getName() {
return new String(Integer.toString(id));
}
public String getTestData01FromMessageContext(MessageContext _mc) {
return (String) _mc.getSelfManagedData(this.getClass(), key01);
}
public String getTestData02FromMessageContext(MessageContext _mc) {
return (String) _mc.getSelfManagedData(this.getClass(), key02);
}
public byte [] getTestData03FromMessageContext(MessageContext _mc) {
return (byte []) _mc.getSelfManagedData(this.getClass(), key03);
}
public long [] getTestData04FromMessageContext(MessageContext _mc) {
return (long []) _mc.getSelfManagedData(this.getClass(), key04);
}
/* we're just using the invoke to set/change/remove data
* Tests:
* for key01: set, remove, set, get
* for key02: set, get, set
* for key03: set, remove, set, get
* for key04: set, get, set, get
*/
public InvocationResponse invoke(MessageContext _mc) throws AxisFault {
String desc = "TempHandler01[id=" + id + "].invoke()";
String title = "MessageContextSelfManagedDataTest::" + desc;
log.debug(title);
String tmp = "whaaa?";
_mc.setSelfManagedData(this.getClass(), key02, tmp);
String data2 = (String) _mc.getSelfManagedData(this.getClass(), key02);
assertEquals(tmp, data2);
_mc.setSelfManagedData(this.getClass(), key01, testData01);
_mc.removeSelfManagedData(this.getClass(), key01);
_mc.setSelfManagedData(this.getClass(), key01, testData01);
String data1 = (String) _mc.getSelfManagedData(this.getClass(), key01);
assertEquals(data1, testData01);
_mc.setSelfManagedData(this.getClass(), key02, testData02);
_mc.setSelfManagedData(this.getClass(), key03, testData03);
byte [] data3 = (byte []) _mc.getSelfManagedData(this.getClass(), key03);
boolean isOk3 = isEquals(data3, testData03);
assertTrue(isOk3);
_mc.removeSelfManagedData(this.getClass(), key03);
_mc.setSelfManagedData(this.getClass(), key03, testData03);
_mc.setSelfManagedData(this.getClass(), key04, testData04);
long [] data4 = (long []) _mc.getSelfManagedData(this.getClass(), key04);
boolean isOk4 = isEquals(data4, testData04);
assertTrue(isOk4);
invokecallcount++;
log.debug(title + ": Completed");
return InvocationResponse.CONTINUE;
}
}
/*
* TempHandler02 sets data, saves it (via the serializeSelfManagedData method
* called by the MessageContext object when saved in this handler's invoke()),
*
*/
public class TempHandler02 extends AbstractHandler implements SelfManagedDataManager {
private int id = -2;
private int serializecallcount = 0;
private int deserializecallcount = 0;
public String testData = new String("this is some test data");
/*
* constructor
*/
public TempHandler02() {
this.id = -1;
this.serializecallcount = 0;
this.deserializecallcount = 0;
}
/*
* constructor
*/
public TempHandler02(int id) {
this.id = id;
this.serializecallcount = 0;
this.deserializecallcount = 0;
}
public int getID() {
return this.id;
}
public String getName() {
return new String(Integer.toString(id));
}
public String getTestDataFromMessageContext(MessageContext _mc) {
return (String) _mc.getSelfManagedData(this.getClass(), Integer.toString(id));
}
/*
* (non-Javadoc)
* @see org.apache.axis2.engine.Handler#invoke(org.apache.axis2.context.MessageContext)
*
* This invoke() method will test several things:
* 1. verify that serializeSelfManagedData is actually called when saving the MessageContext object
* 2. verify that deserializeSelfManagedData is actually called when restoring the MessageContext object
* 3. verify that any SelfManagedData stored in the MessageContext is properly saved/restored (via serializeSelfManagedData/deserializeSelfManagedData)
*/
public InvocationResponse invoke(MessageContext _mc) throws AxisFault {
String desc = "TempHandler02[id=" + id + "].invoke()";
String title = "MessageContextSelfManagedDataTest::" + desc;
log.debug(title);
MessageContext msgContext2 = null; // this will be the restored one
_mc.setSelfManagedData(this.getClass(), Integer.toString(id),
testData + Integer.toString(id));
log.debug(title + ": Setting self managed data using key [" +
Integer.toString(id) + "]");
msgContext2 = saveAndRestore(_mc, "TempHandler02_", desc);
boolean result = (msgContext2 != null);
assertTrue(result);
invokecallcount++;
log.debug(title + ": Completed");
return InvocationResponse.CONTINUE;
}
public void deserializeSelfManagedData(ByteArrayInputStream data, MessageContext _mc)
throws IOException {
deserializecallcount++;
String desc = "TempHandler02[id=" + id + "].deserializeSelfManagedData() count [" +
deserializecallcount + "]";
String title = "MessageContextSelfManagedDataTest::" + desc;
log.debug(title);
ObjectInputStream ois = new ObjectInputStream(data);
testData = ois.readUTF().concat(" with extra text " + Integer.toString(id));
_mc.setSelfManagedData(this.getClass(), Integer.toString(id), testData);
}
public void restoreTransientData(MessageContext _mc) {
// not necessary to test
}
public ByteArrayOutputStream serializeSelfManagedData(MessageContext _mc)
throws IOException {
serializecallcount++;
String desc = "TempHandler02[id=" + id + "].serializeSelfManagedData() count [" +
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?