public void testBean () throws Exception {
MessageContext msgContext = new MessageContext(new AxisServer());
SOAPEnvelope msg = new SOAPEnvelope();
// 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[] {Constants.URI_CURRENT_SOAP_ENC});
reg.register(Constants.URI_CURRENT_SOAP_ENC, 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();
log.debug("---");
log.debug(msgString);
log.debug("---");
Message message = new Message(msgString);
message.setMessageContext(msgContext);
SOAPEnvelope env = message.getSOAPPart().getAsSOAPEnvelope();
RPCElement rpcEl = (RPCElement)env.getFirstBody();
Vector params = rpcEl.getParams();
assertEquals("Wrong # of params in deserialized message!",
1,
params.size());
Object obj = ((RPCParam)params.get(0)).getValue();
assertTrue("Deserialized param not an AttributeBean!",
(obj instanceof AttributeBean));
AttributeBean deserBean = (AttributeBean)obj;
assertTrue("Deserialized bean not equal to expected values!",
(bean.equals(deserBean)));
}