You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by jo...@apache.org on 2006/05/10 14:49:28 UTC
svn commit: r405740 -
/webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml
Author: jochen
Date: Wed May 10 05:49:27 2006
New Revision: 405740
URL: http://svn.apache.org/viewcvs?rev=405740&view=rev
Log:
Added a FAQ entry for resolving XMLRPC-65.
Added:
webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml
Added: webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml
URL: http://svn.apache.org/viewcvs/webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml?rev=405740&view=auto
==============================================================================
--- webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml (added)
+++ webservices/xmlrpc/branches/XMLRPC_2_0_BRANCH/src/site/fml/faq.fml Wed May 10 05:49:27 2006
@@ -0,0 +1,107 @@
+<faqs title="XML-RPC Version 2 FAQ">
+ <part id="Customizing the request">
+ <faq>
+ <question>How do I do basic authentication? The method XmlRpcClient.setBasicAuthentication
+ is deprecated?</question>
+ <answer>
+ <p>The main reason for deprecating the method is that it's implementation is
+ bound to using the sun transport. If you like that, it's fine, but sometimes
+ you don't.
+ </p>
+ <p>The recommended way to specify user and password while still choosing
+ a transport factory goes like this:</p>
+ <source><![CDATA[
+public class MyXmlRpcClient extends XmlRpcClient {
+ private final String myUser, myPassword;
+
+ // Just one constructor here, to be short. Add more, if you like.
+ public MyXmlRpcClient( URL url, String user, String password )
+ {
+ super(url);
+ transportFactory = new DefaultXmlRpcTransportFactory(url);
+ ((DefaultXmlRpcTransportFactory) transportFactory).setBasicAuthentication( user, password );
+
+ }
+}
+ ]]></source>
+ </answer>
+ </faq>
+ </part>
+
+ <part id="Customizing Output">
+ <faq>
+ <question>How do I get a client, which uses "string" tags?</question>
+ <answer>
+ <p>
+ The XML-RPC specification typically states, that atomic values must be surrounded
+ by a tag describing their type, for example "int", or "i4", for integer, or
+ "string" for string. There is one exception: The "string" tag
+ is optional and not mandatory. Apache XML-RPC chooses to omit "string" tags,
+ because that is faster.
+ </p>
+ <p>
+ Unfortunately, there seem to be XML-RPC servers in the wild, which insist
+ to receive this "string" tags. In such cases, one needs to use a
+ custom instance of {@link org.apache.xmlrpc.XmlWriter}. This custom instance
+ might look as follows:
+ </p>
+ <source><![CDATA[
+public class MyXmlWriter extends org.apache.xmlrpc.XmlWriter
+{
+ public MyXmlWriter( OutputStream out, String enc )
+ throws UnsupportedEncodingException
+ {
+ super(out, enc);
+ }
+
+ public void writeObject(Object obj)
+ throws XmlRpcException, IOException
+ {
+ if ( obj == null || !(obj instanceof String))
+ {
+ super.writeObject(obj);
+ } else {
+ startElement("value");
+ startElement("string");
+ chardata(obj.toString());
+ endElement("string");
+ endElement("value");
+ }
+
+ }
+
+}
+ ]]></source>
+ <p>
+ The question remains: How do I tell the XmlRpcClient to use my XmlWriter?
+ Unfortunately, that requires yet another subclass:
+ </p>
+ <source><![CDATA[
+public class MyXmlRpcClient extends org.apache.xmlrpc.XmlRpcClient
+{
+ // Just one constructor here, to be short. Add more, if you like.
+ public MyXmlRpcClient(URL url)
+ {
+ super(url);
+ }
+
+ protected XmlRpcClientWorker newXmlRpcClientWorker()
+ {
+ final TimeZone tz = getTimeZone();
+ final XmlRpcClientRequestProcessor req = new XmlRpcClientRequestProcessor(tz)
+ {
+ protected XmlWriter newXMLWriter(String encoding, OutputStream out)
+ throws UnsupportedEncodingException
+ {
+ return new XmlWriter(out, encoding);
+ }
+ };
+ final XmlRpcClientResponseProcessor res = new XmlRpcClientResponseProcessor(tz);
+ return new XmlRpcClientWorker(req, res);
+ }
+}
+ ]]></source>
+ </answer>
+ </faq>
+ </part>
+</faqs>