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(); } }