Dear Wiki user, You have subscribed to a wiki page or wiki category on "Ws Wiki" for change notification.
The following page has been changed by FahadAizaz: http://wiki.apache.org/ws/FahadAizaz New page: ##language:en == Embed string TAG in struct element using Apache XML RPC Library == As per the xml rpc specifications the struct element containing a value with specifying any TAG is considered to be string. Some servers are not configured to handle such XML data strcutures. Apache XML RPC Library provides a flexibilty for the client code to be handle such improvisations. === Example === Standard specification considers the below mentioned XML data strcuture to be valid {{{ <?xml version="1.0" encoding="utf-8" ?> <methodCall><methodName>Request.myMethod</methodName> <params> <param> <value> <struct> <member><name>Fieldname1</name><value>ANY_STRING</value></member> <member><name>Fieldname2</name><value>ANY_STRING</value></member> <member><name>Fieldname3</name><value><int>INTEGER</int></value></member> <member><name>Fieldname4</name><value><dateTime.iso8601>DATE</dateTime.iso8601></value></member> <member><name>Fieldname5</name><value><int>INTEGER</int></value></member> <member><name>Fieldname6</name><value>ANY_STRING</value></member> </struct> </value> </param> </params> </methodCall> }}} and equal to {{{ <?xml version="1.0" encoding="utf-8" ?> <methodCall><methodName>Request.myMethod</methodName> <params> <param> <value> <struct> <member><name>Fieldname1</name><value><string>ANY_STRING</string></value></member> <member><name>Fieldname2</name><value><string>ANY_STRING</string></value></member> <member><name>Fieldname3</name><value><int>INTEGER</int></value></member> <member><name>Fieldname4</name><value><dateTime.iso8601>DATE</dateTime.iso8601></value></member> <member><name>Fieldname5</name><value><int>INTEGER</int></value></member> <member><name>Fieldname6</name><value><string>ANY_STRING</string></value></member> </struct> </value> </param> </params> </methodCall> }}} === Code === In order to do this custom class has to be created by extending Serializer {{{ public class CustomStringSerializer extends StringSerializer { public void write(ContentHandler pHandler, Object pObject) throws SAXException { write((ContentHandler)pHandler, STRING_TAG, pObject.toString()); } } }}} STRING_TAG does the job for you. Next custom class TypeFactory has to be created in order to realize this change. This custom TypeFactory utilizes the above mentioned Custom Serializer while XML data structure is generated. {{{ public class CustomTypeFactory extends TypeFactoryImpl { public MyTypeFactory(XmlRpcController pController) { super(pController); } public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig, Object pObject) throws SAXException { if (pObject instanceof String) { return new CustomStringSerializer(); } else { return super.getSerializer(pConfig, pObject); } } } }}} Last step creation of client {{{ HashMap data = new HashMap(); data.put("Fieldname1", new String("ANY_STRING") ); data.put("Fieldname2", new String("ANY_STRING") ); data.put("Fieldname3", new Integer(INTEGER)); data.put("Fieldname4", new Date() ); data.put("Fieldname5", new String("ANY_STRING") ); data.put("Fieldname6", new Integer(INTEGER) ); Vector params = new Vector(); params.addElement(data); XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(new URL("http://localhost:8080/RPC2")); XmlRpcClient client = new XmlRpcClient(); client.setTypeFactory(new CustomTypeFactory(client)); client.setConfig(config); client.execute("Request.myMethod", params); }}} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
