Comment obtenir la conformité à Apache XML-RPC 3.1.3 (format de date ISO et fuseau horaire) dans Java 1.6

Nous utilisons Apache XML-RPC 3.1.3 pour communiquer avec la solution de facturation Air. Dans la documentation, il est mentionné qu’apache xml-rpc suit le format de date comme java.util.Date ‘19980717T14: 08: 55’ mais que notre fournisseur a implémenté la date ‘yyyyMMdd’HH: mm: ssZ’ avec le fuseau horaire 🙁

Après avoir examiné la documentation, nous en sums venus à le savoir, nous devons développer un type de données personnalisé pour travailler avec un format de date ISO différent. http://ws.apache.org/xmlrpc/faq.html#nonstandard_date_format Nous avons essayé de continuer avec l’exemple fourni, mais nous nous sums retrouvés avec deux erreurs

1 – variable pFormat introuvable dans la classe MyTypeFactory.java

2 – aucun constructeur trouvé en pointant ces changements dans la classe client client.setTypeFactory (new MyTypeFactory ());

Quelqu’un peut-il nous corriger s’il manque quelque chose ou partager tout autre moyen d’implémenter des types de données personnalisés dans Apache XML-RPC 3.1.3

Notre code de classe client est

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(new URL("http://10.xxx:1234/Air")); config.setEnabledForExceptions(true); config.setBasicUserName("myUser"); config.setBasicPassword("myPassword"); config.setEncoding(XmlRpcClientConfigImpl.UTF8_ENCODING); config.setReplyTimeout(3 * 1000); config.setUserAgent("ITIVR/4.3/1.0"); //3.1 or 4.3 client.setConfig(config); XmlRpcClient client = new XmlRpcClient(); XmlRpcSunHttpTransport http = (XmlRpcSunHttpTransport) new XmlRpcSunHttpTransportFactory(client).getTransport(); Hashtable request = new Hashtable(); request.put("originNodeType", new Ssortingng("IVR")); request.put("originHostName", new Ssortingng("ITIVR")); request.put("originTransactionID", new Ssortingng(new SimpleDateFormat("ddMMyyyyHHmmss").format(new Date()))); request.put("originTimeStamp", new Date()); request.put("subscriberNumber", "0111111111"); Vector v = new Vector(); v.add(request); HashMap o = (HashMap) http.sendRequest(new XmlRpcClientRequestImpl(config, "GetBalanceAndDate", v)); 

Dans ce code, nous obtenons l’erreur “Données hors limites” car nous ne transmettons pas la date au format non valide.

Après avoir examiné les documentations, nous en sums venus à le connaître, son problème de format de date. Le format de date par défaut d’Apache XML-RPC est sans fuseau horaire et la solution de facturation aérienne (Ericsson CS 5.1) accepte la date et le fuseau horaire.

Types de données Apache XML-RPC

Guide des programmeurs UCIP CS5.1

Nous avons corrigé ci-dessus les deux problèmes

Erreur 1 – En ajoutant un nouveau format dans SimpleDateFormat et en remplaçant pFormat par newFormat () dans la classe MyTypeFactory

Erreur 2 – En transmettant l’object XmlRpcClient dans le constructeur, car XmlRpcClient est la classe de grave de XmlRpcServer et XmlRpcClient :), par exemple

 client.setTypeFactory(new MyTypeFactory(client));