tomj 02/02/25 07:24:15
Modified: java/test/encoding PackageTests.java
Added: java/test/encoding TestAttributes.java AttributeBean.java
Log:
Add a test case to test attribute serialization.
Revision Changes Path
1.13 +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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- PackageTests.java 1 Dec 2001 03:39:49 -0000 1.12
+++ PackageTests.java 25 Feb 2002 15:24:14 -0000 1.13
@@ -31,6 +31,7 @@
suite.addTestSuite(TestArrayListConversions.class);
suite.addTestSuite(TestXsiType.class);
suite.addTestSuite(TestOutputter.class);
+ suite.addTestSuite(TestAttributes.class);
return suite;
}
1.1 xml-axis/java/test/encoding/TestAttributes.java
Index: TestAttributes.java
===================================================================
package test.encoding;
import junit.framework.TestCase;
import org.apache.axis.MessageContext;
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.DeserializationContextImpl;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.SerializationContextImpl;
import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.encoding.TypeMapping;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.Constants;
import org.apache.axis.utils.XMLUtils;
import org.apache.axis.client.Call;
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.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;
import javax.xml.rpc.namespace.QName;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import AttributeBean;
/**
* Test the serialization of a bean with attributes
*
* @author Tom Jordahl ([EMAIL PROTECTED])
*/
public class TestAttributes extends TestCase {
static Log log =
LogFactory.getLog(TestAttributes.class.getName());
public static final String myNS = "urn:myNS";
public static void main(String [] args) throws Exception
{
TestAttributes tester = new TestAttributes("TestAttributes");
tester.testBean();
}
public TestAttributes(String name) {
super(name);
}
static final String expectedXML =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<SOAP-ENV:Envelope
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <SOAP-ENV:Body>\n" +
" <method1 xmlns=\"urn:myNamespace\">\n" +
" <struct name=\"James Bond\" male=\"true\">\n" +
" <ID>1.15</ID>\n" +
" <age>35</age>\n" +
" </struct>\n" +
" </method1>\n" +
" </SOAP-ENV:Body>\n" +
"</SOAP-ENV:Envelope>";
public void testBean () throws Exception {
MessageContext msgContext = new MessageContext(new AxisServer());
SOAPEnvelope msg = new SOAPEnvelope();
// set no encoding (use=literal)
msgContext.setEncodingStyle(null);
// Don't serialize xsi:type attributes
msgContext.setProperty(Call.SEND_TYPE_ATTR, "false" );
// Create bean with data
AttributeBean bean = new AttributeBean();
bean.setAge(35);
bean.setID(1.15F);
bean.setMale(true);
bean.setName("James Bond");
RPCParam arg = new RPCParam("", "struct", bean);
RPCElement body = new RPCElement("urn:myNamespace", "method1", new Object[]{
arg });
msg.addBodyElement(body);
body.setEncodingStyle(null);
Writer stringWriter = new StringWriter();
SerializationContext context = new SerializationContextImpl(stringWriter,
msgContext);
context.setDoMultiRefs(false); // no multirefs
context.setPretty(false);
// Create a TypeMapping and register the Bean serializer/deserializer
TypeMappingRegistry reg = context.getTypeMappingRegistry();
TypeMapping tm = (TypeMapping) reg.createTypeMapping();
// The "" namespace is literal (no encoding).
tm.setSupportedNamespaces(new String[] {""});
reg.register("", tm);
QName beanQName = new QName("typeNS", "TheBean");
tm.register(AttributeBean.class,
beanQName,
new BeanSerializerFactory(AttributeBean.class, beanQName),
new BeanDeserializerFactory(AttributeBean.class, beanQName));
// Serialize the bean in to XML
msg.output(context);
// Get the XML as a string
String msgString = stringWriter.toString();
// verify results
assertEquals("Serialized bean and expected results don't match",
expectedXML, msgString);
log.debug("---");
log.debug(msgString);
log.debug("---");
/*
TODO: This part of the test is wrong
// Now feed the XML in to the deserializer
StringReader reader = new StringReader(msgString);
DeserializationContext dser = new DeserializationContextImpl(
new InputSource(reader), msgContext, org.apache.axis.Message.REQUEST);
// deserialize it
dser.parse();
// get the results
SOAPEnvelope env = dser.getEnvelope();
RPCElement rpcElem = (RPCElement)env.getFirstBody();
RPCParam struct = rpcElem.getParam("struct");
assertNotNull("No <struct> param", struct);
Object obj = struct.getValue();
System.out.println(obj.toString());
AttributeBean val = (AttributeBean)struct.getValue();
assertNotNull("No value for struct param", val);
assertEquals("Bean and Val Age members are not equal", bean.getAge(),
val.getAge());
assertEquals("Bean and Val ID members are not equal",bean.getID(),
bean.getID(), 1.15F);
assertEquals("Bean and Val boolean attributes are not equal",bean.getMale(),
bean.getMale());
assertEquals("Bean and Val name attributes are not equal",bean.getName(),
bean.getName());
*/
}
}
1.1 xml-axis/java/test/encoding/AttributeBean.java
Index: AttributeBean.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Axis" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/**
* Simple Java Bean with fields that should be serialized as attributes
*/
public class AttributeBean implements java.io.Serializable {
private int age;
private float iD;
private java.lang.String name; // attribute
private boolean male; // attribute
public AttributeBean() {
}
public AttributeBean(int age, float iD, java.lang.String name, boolean male) {
this.age = age;
this.iD = iD;
this.name = name;
this.male = male;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getID() {
return iD;
}
public void setID(float iD) {
this.iD = iD;
}
public java.lang.String getName() {
return name;
}
public void setName(java.lang.String name) {
this.name = name;
}
public boolean getMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
// List of fields that are XML attributes
public static java.lang.String[] _attrs = new String[] {
"name",
"male",
};
/**
* Return list of bean field names that are attributes
*/
public static java.lang.String[] getAttributeElements() {
return _attrs;
}
}