public void doTestData(boolean multiref) throws Exception { MessageContext msgContext = new MessageContext(new AxisServer()); msgContext.setSOAPConstants(SOAPConstants.SOAP12_CONSTANTS); msgContext.setProperty(Constants.MC_NO_OPERATION_OK, Boolean.TRUE); SOAPEnvelope msg = new SOAPEnvelope(SOAPConstants.SOAP12_CONSTANTS); RPCParam arg1 = new RPCParam("urn:myNamespace", "testParam", "this is a string"); Data data = new Data(); data.stringMember = "String member"; data.floatMember = new Float("4.54"); RPCParam arg2 = new RPCParam("", "struct", data); RPCElement body = new RPCElement("urn:myNamespace", "method1", new Object[] {arg1, arg2}); msg.addBodyElement(body); Writer stringWriter = new StringWriter(); SerializationContext context = new SerializationContext(stringWriter, msgContext); context.setDoMultiRefs(multiref); // Create a TypeMapping and register the specialized Type Mapping TypeMappingRegistry reg = context.getTypeMappingRegistry(); TypeMapping tm = (TypeMapping) reg.createTypeMapping(); tm.setSupportedEncodings(new String[] {Constants.URI_SOAP12_ENC}); reg.register(Constants.URI_SOAP12_ENC, tm); QName dataQName = new QName("typeNS", "Data"); tm.register(Data.class, dataQName, new DataSerFactory(), new DataDeserFactory()); msg.output(context); String msgString = stringWriter.toString(); log.debug("---"); log.debug(msgString); log.debug("---"); StringReader reader = new StringReader(msgString); DeserializationContext dser = new DeserializationContext( new InputSource(reader), msgContext, org.apache.axis.Message.REQUEST); dser.parse(); SOAPEnvelope env = dser.getEnvelope(); RPCElement rpcElem = (RPCElement) env.getFirstBody(); RPCParam struct = rpcElem.getParam("struct"); assertNotNull("No <struct> param", struct); Data val = (Data) struct.getObjectValue(); assertNotNull("No value for struct param", val); assertEquals("Data and Val string members are not equal", data.stringMember, val.stringMember); assertEquals( "Data and Val float members are not equal", data.floatMember.floatValue(), val.floatMember.floatValue(), 0.00001F); }
/** Writes the exception data to the faultDetails */ @Override public void writeDetails( javax.xml.namespace.QName qname, org.apache.axis.encoding.SerializationContext context) throws java.io.IOException { context.serialize(qname, null, this); }