Como obter a conformidade do Apache XML-RPC 3.1.3 (formato de data ISO junto com o fuso horário) no Java 1.6
Estamos usando o Apache XML-RPC 3.1.3 para se comunicar com a solução de cobrança da Air. Na documentação, mencionamos que o apache xml-rpc segue o formato de data como java.util.Date '19980717T14: 08: 55', mas nosso fornecedor implementou a data como 'aaaamMMdd'T'HH: mm: ssZ' além do fuso horário :(
Depois de revisar a documentação, sabemos que precisamos desenvolver um tipo de dados personalizado para trabalhar com diferentes formatos de data ISO.http://ws.apache.org/xmlrpc/faq.html#nonstandard_date_format Tentamos continuar com o exemplo fornecido, mas acabamos com dois erros
1 - Variável pFormat não encontrada na classe MyTypeFactory.java
2 - nenhum construtor encontrado ao apontar essas alterações na classe do cliente client.setTypeFactory (new MyTypeFactory ());
Alguém pode nos corrigir se estiver faltando alguma coisa ou compartilhar outra maneira de implementar tipos de dados personalizados no Apache XML-RPC 3.1.3
Nosso código de classe de cliente é
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://10.x.x.x: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 String("IVR"));
request.put("originHostName", new String("ITIVR"));
request.put("originTransactionID", new String(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));
Neste código, estamos recebendo o erro 'Dados fora dos limites' porque não estamos passando data em formato inválido.