java xmlrpc格式错误的输出
Posted
技术标签:
【中文标题】java xmlrpc格式错误的输出【英文标题】:java xmlrpc malformed output 【发布时间】:2015-09-12 09:23:49 【问题描述】:如下所示。对于 String 中的所有值,输出为 <value>val</value>
而不是 <value><string>EXT</string></value>
HashMap parameterMap = new HashMap();
client.setTransportFactory(new CustomXmlRpcCommonsTransportFactory(client));
client.setConfig(config);
parameterMap.put("hostName", "EXT");
parameterMap.put("externalData1", "EXEMPLE");
parameterMap.put("originTimeStamp", new Date());
parameterMap.put("subscriberNumberNAI", 2);
parameterMap.put("subscriberNumber", "278980890");
ArrayList params = new ArrayList();
params.add(parameterMap);
client.executeAsync("Methode", params, callback);
还有我的输出
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>GetBalanceAndDate</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>subscriberNumberNAI</name>
<value>
<i4>2</i4>
</value>
</member>
<member>
<name>hostName</name>
<value>EXT</value>
</member>
<member>
<name>subscriberNumber</name>
<value>278980890</value>
</member>
<name>originTimeStamp</name>
<value>
<dateTime.iso8601>20150912T08:50:04</dateTime.iso8601>
</value>
</member>
<member>
<name>externalData1</name>
<value>EXEMPLE</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
【问题讨论】:
你使用什么库? 我已经对输出进行了格式化,使其可读,它显示<member>
在<name>originTimeStamp</name>
之前丢失。也没有在任何地方看到<value>val</value>
,那么您还有什么问题?
嗨 Jacek,我使用 org apache xmlrpc 库
Andreas,我的意思是例如 根据XML-RPC Data types,字符串可以是任一
<string>Hello world!</string>
或者只是
Hello world!
<string>
标签是可选的。
【讨论】:
我更改了我的 xmlrpc 库,现在一切正常。感谢大家的宝贵支持【参考方案2】:Apache XML-RPC is sending strings as <value>SomeString</value>.
Whereas I would expect <value><string>SomeString</string></value>.
两种格式都有效。 XML-RPC 兼容软件(如 Apache XML-RPC 一样)必须能够理解这两者。当然,你只能生产一个。不幸的是,有很多处理器只能理解一个。
幸运的是,更改 Apache XML-RPC 生成的格式并不太难。首先,创建一个自定义类型工厂:
package mypackage;
import org.apache.xmlrpc.common.TypeFactoryImpl;
import org.apache.xmlrpc.common.XmlRpcController;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
public class MyTypeFactory extends TypeFactoryImpl
private static final TypeSerializer myStringSerializer = new StringSerializer()
public void write(ContentHandler pHandler, Object pObject) throws SAXException
write(pHandler, STRING_TAG, pObject.toString());
;
public MyTypeFactory(XmlRpcController pController)
super(pController);
public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig,
Object pObject) throws SAXException
if (pObject instanceof String)
return myStringSerializer;
return super.getSerializer(pConfig, pObject);
然后你必须安装那个自定义类型工厂。这如“自定义数据类型”部分所述工作:http://ws.apache.org/xmlrpc/advanced.html
【讨论】:
以上是关于java xmlrpc格式错误的输出的主要内容,如果未能解决你的问题,请参考以下文章
PHP xmlrpc 客户端和 Python 2.5 xmlrpc 服务器:不完整的数据和由对等错误重置的连接
如何让 ruby 的 xmlrpc 客户端忽略 SSL 证书错误?
使用为 ARC 配置的 XMLRPC 库,收到 ARC 错误