package test.encoding;
import junit.framework.TestCase;
import org.apache.axis.Constants;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.encoding.TypeMapping;
import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.message.RPCElement;
import org.apache.axis.message.RPCParam;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.server.AxisServer;
import javax.xml.namespace.QName;
import java.util.Vector;
/**
* Test deserialization of SOAP responses. Test case for Bug 25179
* (BeanDeserializer cannot deserialize child array unless xsi:type="SE:Array" provided)
*/
public class TestBeanDeser3 extends TestCase {
private String header;
private String footer;
private AxisServer server = new AxisServer();
public TestBeanDeser3(String name) {
super(name);
header =
"\n" +
"\n" +
"\n";
footer =
"\n" +
"\n";
TypeMappingRegistry tmr = server.getTypeMappingRegistry();
TypeMapping tm = (TypeMapping) tmr.createTypeMapping();
tm.setSupportedEncodings(new String[]{Constants.URI_DEFAULT_SOAP_ENC});
tmr.register(Constants.URI_DEFAULT_SOAP_ENC, tm);
tm.register(test.encoding.beans.SbTravelRequest.class,
new QName("http://www.sidestep.com/sbws", "SbTravelRequest"),
new org.apache.axis.encoding.ser.BeanSerializerFactory(
test.encoding.beans.SbTravelRequest.class,
new QName("http://www.sidestep.com/sbws", "SbTravelRequest")),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(
test.encoding.beans.SbTravelRequest.class,
new QName("http://www.sidestep.com/sbws", "SbTravelRequest")));
tm.register(test.encoding.beans.SbSupplier.class,
new QName("http://www.sidestep.com/sbws", "SbSupplier"),
new org.apache.axis.encoding.ser.BeanSerializerFactory(
test.encoding.beans.SbSupplier.class,
new QName("http://www.sidestep.com/sbws", "SbSupplier")),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(
test.encoding.beans.SbSupplier.class,
new QName("http://www.sidestep.com/sbws", "SbSupplier")));
}
protected Object deserialize(String data)
throws Exception {
Message message = new Message(header + data + footer);
message.setMessageContext(new MessageContext(server));
SOAPEnvelope envelope = (SOAPEnvelope) message.getSOAPEnvelope();
assertNotNull("SOAP envelope should not be null", envelope);
RPCElement body = (RPCElement) envelope.getFirstBody();
assertNotNull("SOAP body should not be null", body);
Vector arglist = body.getParams();
assertNotNull("arglist", arglist);
assertTrue("param.size()<=0 {Should be > 0}", arglist.size() > 0);
RPCParam param = (RPCParam) arglist.get(0);
assertNotNull("SOAP param should not be null", param);
return param.getObjectValue();
}
public void testTravelRequest() throws Exception {
String response =
"\n" +
" \n" +
"\n" +
"\n" +
"SOAP test 1\n" +
"US\n" +
"SJC\n" +
"ATL\n" +
"2002-08-10T13:42:24.024Z\n" +
"2002-06-27T13:42:24.024Z\n" +
"AIR:RTACR\n" +
"\n" +
"\n" +
"\n" +
" - \n" +
"
\n" +
"" +
"" +
" 0" +
" SC**" +
" CN**" +
" " +
"- abc
" +
"- " +
"
- def
" +
" " +
"";
test.encoding.beans.SbTravelRequest travelRequest = (test.encoding.beans.SbTravelRequest) deserialize(response);
assertNotNull("supPliers array missing", travelRequest.supPliers);
assertTrue(travelRequest.supPliers.length == 1);
assertTrue(travelRequest.supPliers[0].searchType.intValue() == 0);
assertTrue(travelRequest.supPliers[0].supplierCode.equals("SC**"));
assertTrue(travelRequest.supPliers[0].chanNel.equals("CN**"));
}
public static void main(String[] args) throws Exception {
TestBeanDeser3 tester = new TestBeanDeser3("test");
tester.testTravelRequest();
}
}