%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% :XML-RPC
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{XML-RPC -- počátek webových služeb}
XML-RPC (Extended Markup Language -- Remote Procedure Call) je původní protokol pro volání RPC webových služeb, který vznikl v~roce 1998. Jak již název napovídá, výměna dat mezi webovou službou a~jejím klientem probíhá ve formátu XML. Mezi výhody XML-RPC patří jednoduchost a~snadná čitelnost.
\subsection{Požadavek}
Požadavek
Following example used by attached application demonstrates calling a~remote method by XML-RPC.
\begin{verbatim}
calculateExchangeRate
CZK
JPY
100.00
\end{verbatim}
This request calls method \texttt{calculateExchangeRate} with three unnamed parameters -- two of type string and one of type double. Response for previously described request could be the following.
\begin{verbatim}
calculateExchangeRate
550.00
\end{verbatim}
Returned XML file contains method name (for checking purpose) and a~return value. Despite of element name \texttt{params}, only one value could be returned. When severel values are to be returned, they must be stored in either an array or a~struct.
XML-RPC offers basic data types used in all common programming languages. Namely, they are int, double, boolean, string, array, struct (as used in C++ language) and date (in ISO8601 format). All data types are to be stored in element with appropriate name (ie. \texttt{boolean} for boolean type). An interesting fact is that arrays or structs could contain another arrays or structs, which enables to simulate simple object with attribute hierarchy.
XML-RPC is very simple. It is very easy to write a~handler in ones application, that would write method calls into a~XML file and send them to the server.
It could be confusing for beginner user, that element \texttt{param} must always be followed by element \texttt{value}, making it some sort of "double element". Also, as previously mentioned, method response contains return value in element \texttt{params}, that could imply that several values could be returned at once. Moreover naming returned value \texttt{param} could lead into further confusion.
\subsection{Apache XML-RPC}
\label{XML-RPC Apache}
XML-RPC library from Apache Xml Project provides fully automatic handeling of XML-RPC messages. Sadly, the library structure in version 3.1 has changed a~lot from what is described in \cite{Web Services Essentials} and is a~lot more complicated for both understanding and usage. It is fully functional and the XML-RPC server can be set up easily (as could be seen in attached example -- \emph{XML-RPC Demonstration}, it however provides only a~little space for customizing core methods and classes.