| package samples.encoding; |
| |
| import org.apache.axis.Constants; |
| import org.apache.axis.MessageContext; |
| import org.apache.axis.encoding.DeserializationContext; |
| import org.apache.axis.encoding.SerializationContext; |
| import org.apache.axis.encoding.SerializationContext; |
| 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.xml.sax.InputSource; |
| |
| import javax.xml.namespace.QName; |
| import java.io.FileReader; |
| import java.io.Reader; |
| import java.io.StringReader; |
| import java.io.StringWriter; |
| import java.io.Writer; |
| |
| /** Little serialization test with a struct. |
| */ |
| public class TestSer |
| { |
| public static final String myNS = "urn:myNS"; |
| |
| public static void main(String args[]) { |
| MessageContext msgContext = new MessageContext(new AxisServer()); |
| SOAPEnvelope msg = new SOAPEnvelope(); |
| RPCParam arg1 = new RPCParam("urn:myNamespace", "testParam", "this is a string"); |
| QName dataQName = new QName("typeNS", "Data"); |
| |
| Data data = new Data(); |
| Data data2 = new Data(); |
| data.stringMember = "String member"; |
| data.floatMember = new Float("1.23"); |
| data.dataMember = data2; |
| |
| data2.stringMember = "another str member"; |
| data2.floatMember = new Float("4.56"); |
| data2.dataMember = null; // "data;" for loop-test of multi-refs |
| |
| RPCParam arg2 = new RPCParam("", "struct", data); |
| RPCElement body = new RPCElement("urn:myNamespace", "method1", new Object[]{ arg1, arg2 }); |
| msg.addBodyElement(body); |
| |
| try { |
| Reader reader = null; |
| |
| if (args.length == 0) { |
| Writer stringWriter = new StringWriter(); |
| SerializationContext context = new SerializationContext(stringWriter, msgContext); |
| |
| TypeMappingRegistry reg = context.getTypeMappingRegistry(); |
| TypeMapping tm = (TypeMapping) reg.getOrMakeTypeMapping(Constants.URI_SOAP11_ENC); |
| tm.register(Data.class, dataQName, new DataSerFactory(), new DataDeserFactory()); |
| |
| msg.output(context); |
| |
| String msgString = stringWriter.toString(); |
| System.out.println("Serialized msg:"); |
| System.out.println(msgString); |
| |
| System.out.println("-------"); |
| System.out.println("Testing deserialization..."); |
| |
| reader = new StringReader(msgString); |
| } else { |
| reader = new FileReader(args[0]); |
| } |
| |
| 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"); |
| if (struct == null) |
| throw new Exception("No <struct> param"); |
| |
| if (!(struct.getObjectValue() instanceof Data)) { |
| System.out.println("Not a Data object! "); |
| System.out.println(struct.getObjectValue()); |
| System.exit(1); |
| } |
| |
| Data val = (Data)struct.getObjectValue(); |
| if (val == null) |
| throw new Exception("No value for struct param"); |
| |
| System.out.println(val.toString()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| } |