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 org.apache.axis.utils.JavaUtils; import javax.xml.namespace.QName; import java.util.Vector; /** * Test deserialization of SOAP responses */ public class TestBeanDeser extends TestCase { private String header; private String footer; private AxisServer server = new AxisServer(); public TestBeanDeser(String name) { this(name, Constants.URI_DEFAULT_SCHEMA_XSI, Constants.URI_DEFAULT_SCHEMA_XSD); } public TestBeanDeser(String name, String NS_XSI, String NS_XSD) { 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.RETURN.class, new QName("urn:test.encoding", "RETURN"), new org.apache.axis.encoding.ser.BeanSerializerFactory( test.encoding.RETURN.class, new QName("urn:test.encoding", "RETURN")), new org.apache.axis.encoding.ser.BeanDeserializerFactory( test.encoding.RETURN.class, new QName("urn:test.encoding", "RETURN"))); } /** * Verify that two objects have the same value, handling arrays... */ private static boolean equals(Object obj1, Object obj2) { if ((obj1 == null) || (obj2 == null)) return (obj1 == obj2); if (obj1.equals(obj2)) return true; return false; } /** * Verify that a given XML deserialized produces the expected result */ protected void deserialize(String data, Object expected) throws Exception { deserialize(data, expected, false); } protected void deserialize(String data, Object expected, boolean tryConvert) 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); Object result = param.getObjectValue(); if (!equals(result, expected)) { // Try to convert to the expected class if (tryConvert) { Object result2 = JavaUtils.convert(result, expected.getClass()); if (!equals(result2, expected)) { assertEquals("The result is not what is expected.", expected, result); } } else { assertEquals("The result is not what is expected.", expected, result); } } } // Struct Return public void testReturn() throws Exception { test.encoding.RETURN ret = new test.encoding.RETURN(); ret.setTYPE("000"); ret.setID("001"); ret.setNUMBER("002"); ret.setMESSAGE("003"); ret.setLOGNO("004"); ret.setLOGMSGNO("005"); ret.setMESSAGEV1("006"); ret.setMESSAGEV2("007"); ret.setMESSAGEV3("008"); ret.setMESSAGEV4("009"); String response = "\n"+ " \n"+ " 000\n"+ " 001\n"+ " 002\n"+ " 003\n"+ " 004\n"+ " 005\n"+ " 006\n"+ " 007\n"+ " 008\n"+ " 009\n"+ " \n"+ ""; deserialize(response,ret,true); } /* // Struct Return - variation public void testReturn2() throws Exception { test.encoding.RETURN ret = new test.encoding.RETURN(); ret.setTYPE("000"); ret.setID("001"); ret.setNUMBER("002"); ret.setMESSAGE("003"); ret.setLOGNO("004"); ret.setLOGMSGNO("005"); ret.setMESSAGEV1("006"); ret.setMESSAGEV2("007"); ret.setMESSAGEV3("008"); ret.setMESSAGEV4("009"); String response = "\n"+ " \n"+ " 000\n"+ " 001\n"+ " 002\n"+ " 003\n"+ " 004\n"+ " 005\n"+ " 006\n"+ " 007\n"+ " 008\n"+ " 009\n"+ " \n"+ ""; deserialize(response,ret,true); } */ public static void main(String [] args) throws Exception { TestBeanDeser tester = new TestBeanDeser("test"); tester.testReturn(); } }