dims 2002/11/20 06:59:17 Modified: java/src/org/apache/axis/encoding/ser ArraySerializer.java java/test/encoding PackageTests.java Added: java/test/encoding TestArray.java Log: Fix and test case for Bug 14666 - NullPointerException taken in ArraySerializer when specifying array as input parameter. from [EMAIL PROTECTED] (Randall Evans) Revision Changes Path 1.39 +7 -3 xml-axis/java/src/org/apache/axis/encoding/ser/ArraySerializer.java Index: ArraySerializer.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/ArraySerializer.java,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- ArraySerializer.java 4 Nov 2002 17:01:27 -0000 1.38 +++ ArraySerializer.java 20 Nov 2002 14:59:17 -0000 1.39 @@ -109,8 +109,12 @@ throw new IOException(Messages.getMessage("cantDoNullArray00")); MessageContext msgContext = context.getMessageContext(); - SchemaVersion schema = msgContext.getSchemaVersion(); - SOAPConstants soap = msgContext.getSOAPConstants(); + SchemaVersion schema = SchemaVersion.SCHEMA_2001; + SOAPConstants soap = SOAPConstants.SOAP11_CONSTANTS; + if(msgContext != null) { + schema = msgContext.getSchemaVersion(); + soap = msgContext.getSOAPConstants(); + } Class cls = value.getClass(); Collection list = null; @@ -224,7 +228,7 @@ // actual schema array or for a maxOccurs usage. // For the maxOccurs case, the currentXMLType of the context is // the same as the componentQName. - boolean maxOccursUsage = !context.getMessageContext().isEncoded() && + boolean maxOccursUsage = (msgContext != null && !msgContext.isEncoded()) && componentQName.equals(context.getCurrentXMLType()); if (!maxOccursUsage) { 1.25 +1 -0 xml-axis/java/test/encoding/PackageTests.java Index: PackageTests.java =================================================================== RCS file: /home/cvs/xml-axis/java/test/encoding/PackageTests.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- PackageTests.java 16 Aug 2002 20:40:17 -0000 1.24 +++ PackageTests.java 20 Nov 2002 14:59:17 -0000 1.25 @@ -37,6 +37,7 @@ suite.addTestSuite(TestRoundTrip.class); suite.addTestSuite(TestOmittedValues.class); suite.addTestSuite(TestMultiRefIdentity.class); + suite.addTestSuite(TestArray.class); return suite; } } 1.1 xml-axis/java/test/encoding/TestArray.java Index: TestArray.java =================================================================== 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.configuration.BasicServerConfig; import org.apache.axis.encoding.SerializationContext; import org.apache.axis.encoding.SerializationContextImpl; import org.apache.axis.encoding.TypeMapping; import org.apache.axis.encoding.TypeMappingRegistry; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import org.apache.axis.encoding.ser.BeanSerializerFactory; import org.apache.axis.encoding.ser.SimpleDeserializerFactory; import org.apache.axis.encoding.ser.SimpleSerializerFactory; 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.components.logger.LogFactory; import org.apache.commons.logging.Log; import javax.xml.namespace.QName; import java.io.StringWriter; import java.io.Writer; import java.util.Vector; /** * Test the serialization of an array. Test case for Bug 14666 * (NullPointerException taken in ArraySerializer when specifying array as input parameter.) */ public class TestArray extends TestCase { static Log log = LogFactory.getLog(TestArray.class.getName()); public TestArray(String name) { super(name); } public void testArray1() { String tab_items [] = new String[4]; tab_items[0] = "table item 1"; tab_items[1] = "table item 2"; tab_items[2] = "table item 3"; tab_items[3] = "table item 4"; RPCParam in_table = new RPCParam("http://local_service.com/", "Input_Array", tab_items); RPCElement input = new RPCElement("http://localhost:8000/tester", "echoString", new Object[]{in_table}); SOAPEnvelope env = new SOAPEnvelope(); env.addBodyElement(input); String text = env.toString(); assertTrue(text != null); for(int i=0;i<tab_items.length;i++){ assertTrue(text.indexOf(tab_items[i])!=-1); } } }