我们正在使用 Apache XML-RPC 3.1.3 与 Air billing 解决方案进行通信。在文档中提到 apache xml-rpc 遵循日期格式为 java.util.Date '19980717T14:08:55' 但我们的供应商将日期实现为 'yyyyMMdd'T'HH:mm:ssZ' 添加时区:(
查看文档后,我们了解到,我们需要开发自定义数据类型以使用 ISO 不同的日期格式。 http://ws.apache.org/xmlrpc/faq.html#nonstandard_date_format 我们尝试继续提供的示例,但最终出现两个错误
1 - 在 MyTypeFactory.java 类中找不到 pFormat 变量
2 - 在客户端类中指向这些更改时未找到构造函数 client.setTypeFactory(new MyTypeFactory());
如果我们遗漏了任何内容,有人可以纠正我们吗?或者分享在 Apache XML-RPC 3.1.3 中实现自定义数据类型的任何其他方法
我们的客户端类代码是
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));
在此代码中,我们收到错误“数据超出范围”,因为我们没有以无效格式传递日期。
最佳答案
在查看文档后,我们了解到,其日期格式相关问题。 Apache XML-RPC 默认日期格式不带时区,航空计费解决方案(Ericsson CS 5.1)接受日期和时区。
我们已经解决了上述两个问题
错误 1 - 通过在 SimpleDateFormat 中添加新格式并在 MyTypeFactory 类中用 newFormat() 替换 pFormat
错误 2 - 通过在构造函数中传递 XmlRpcClient 对象,因为 XmlRpcClient 是 XmlRpcServer 和 XmlRpcClient 的基础类:) 例如
client.setTypeFactory(new MyTypeFactory(client));
关于java - 如何在 Java 1.6 中获得 Apache XML-RPC 3.1.3 合规性(ISO 日期格式和时区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763272/