xml_rpc 0.2.2

  • README.md
  • CHANGELOG.md
  • Example
  • Installing
  • Versions
  • 83

xml_rpc

Build Status

A library to communicate through the XML-RPC protocol.

Usage

A simple usage example:

import 'package:xml_rpc/client.dart' as xml_rpc;

main() {
  final url = '...';
  xml_rpc
      .call(url, 'examples.getStateName', [41])
      .then((result) => print(result))
      .catchError((error) => print(error));
}

It will sent the following xml content:

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
      <value><i4>41</i4></value>
    </param>
  </params>
</methodCall>

Every xmlrpc call has to be done with the call(...) function. You must give the url, the method name and the parameters. This function returns a Future with the result received. If the response contains a <fault> a Fault object is thrown and can be catch with the .catchError() on the Future.

To use this package from browser you can provide as client optional named argument on call a http.BrowserClient.

Parameter types

Here are the conversion table.

xmlrpcDart
<int> or <i4>int
<boolean>bool
<string> or TextString
<double>double
<dateTime.iso8601>DateTime
<base64>Base64Value
<struct>Map<String, dynamic>
<array>List

XML-RPC Extension Types

Some XML-RPC implementations handle additionnal types. For instance Apache ws-xmlrpc may support long values with <i8> and other types (see https://ws.apache.org/xmlrpc/types.html).

You can provide custom codecs that will be used to encode and decode those values.

If you use the XML-RPC for C and C++ library on the server side you can directly use the dart library client_c.dart to be able to handle <i8> and <nil>.

Using this package on JS side

If you use this package on JS side you may face some problem dealing with numbers. On JS side there are no difference between int and double. So by default an double 1.0 will be encoded as <int>1</int>.

You can workaround this issue:

  • wrap doubles in a custom type:
    class _Double {
      _Double(this.value) : assert(value != null);
      final double value;
    }
    
  • create a codec for this wrapper type:
    final _doubleWrapperCodec = new SimpleCodec<_Double>(
      nodeLocalName: 'double',
      encodeValue: (value) => value.value.toString(),
      decodeValue: (text) => new _Double(double.parse(text)),
    );
    
  • create a list of codecs:
    final codecs = new List<Codec>.unmodifiable(<Codec>[
      _doubleWrapperCodec,
      intCodec,
      boolCodec,
      stringCodec,
      dateTimeCodec,
      base64Codec,
      structCodec,
      arrayCodec,
    ]);
    
  • make calls with your codecs:
    main() {
      xml_rpc.call(url, 'method', [params], encodeCodecs: codecs, decodeCodecs: codecs);
    }
    

Features and bugs

Please file feature requests and bugs at the issue tracker.

Changelog

0.2.2 (2018-08-01)

  • Migration to Dart 2.

0.2.1 (2018-06-20)

  • Handle <value /> that can occur with empty strings.

0.2.0 (2018-06-18)

  • Switch to Dart 2.
  • Allow to specify the encoders/decoders used. This allows to communicate with XML-RPC implementation that have extensions like <nil>, <i8>...
  • Expose a client_c.dart library that directly handle <nil> and <i8> extension types.

0.1.4 (2016-11-24)

  • Evo: remove crypto dependency

0.1.3 (2015-02-05)

  • Evo: allow to specify encoding for calls.

0.1.2 (2015-01-31)

  • Evo: call accepts an optional named parameter client allowing to make the calls from browser.
  • Fix: If no type is indicated, the type is string.
  • Fix: <boolean> instead of <bool>.

0.1.1 (2015-01-30)

  • Fix: Http exception are not catched.

0.1.0 (2015-01-28)

  • First completed version for client side usage.

Semantic Version Conventions

http://semver.org/

  • Stable: All even numbered minor versions are considered API stable: i.e.: v1.0.x, v1.2.x, and so on.
  • Development: All odd numbered minor versions are considered API unstable: i.e.: v0.9.x, v1.1.x, and so on.

example/main.dart

// Copyright (c) 2015, Alexandre Ardhuin. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
import 'package:xml_rpc/client.dart' as xml_rpc;

void main() {
  const url = 'https://api.flickr.com/services/xmlrpc';
  xml_rpc
      .call(url, 'flickr.panda.getList', [
        {'api_key': 'yourApiKey'}
      ])
      .then(print)
      .catchError(print);
}

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  xml_rpc: ^0.2.2

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter packages get

Alternatively, your editor might support pub get or flutter packages get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:xml_rpc/client.dart';
import 'package:xml_rpc/client_c.dart';
  
Version Uploaded Documentation Archive
0.2.2 Aug 2, 2018 Go to the documentation of xml_rpc 0.2.2 Download xml_rpc 0.2.2 archive
0.2.1 Jun 20, 2018 Go to the documentation of xml_rpc 0.2.1 Download xml_rpc 0.2.1 archive
0.2.0 Jun 18, 2018 Go to the documentation of xml_rpc 0.2.0 Download xml_rpc 0.2.0 archive
0.1.4 Nov 24, 2016 Go to the documentation of xml_rpc 0.1.4 Download xml_rpc 0.1.4 archive
0.1.3 Feb 5, 2015 Go to the documentation of xml_rpc 0.1.3 Download xml_rpc 0.1.3 archive
0.1.2 Jan 31, 2015 Go to the documentation of xml_rpc 0.1.2 Download xml_rpc 0.1.2 archive
0.1.1 Jan 30, 2015 Go to the documentation of xml_rpc 0.1.1 Download xml_rpc 0.1.1 archive
0.1.0 Jan 28, 2015 Go to the documentation of xml_rpc 0.1.0 Download xml_rpc 0.1.0 archive
Popularity:
Describes how popular the package is relative to other packages. [more]
66
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
83
Learn more about scoring.

We analyzed this package on Aug 10, 2018, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.0.0
  • pana: 0.11.8

Platforms

Detected platforms: Flutter, web, other

No platform restriction found in libraries.

Suggestions

The description is too short.

Add more detail about the package, what it does and what is its target use case. Try to write at least 60 characters.

Package is pre-v1 release.

While there is nothing inherently wrong with versions of 0.*.*, it usually means that the author is still experimenting with the general direction of the API.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.62.0 <3.0.0
http ^0.11.0 0.11.3+17
meta ^1.1.5 1.1.6
xml ^3.0.0 3.2.0
Transitive dependencies
async 2.0.8
charcode 1.1.2
collection 1.14.11
http_parser 3.1.3
path 1.6.2
petitparser 2.0.0
source_span 1.4.1
string_scanner 1.0.3
typed_data 1.1.6
Dev dependencies
test ^1.3.0