我正在尝试使用apache xmlrpc(3.1.3)库运行XML RPC服务器。
我在该服务器上实现了XML RPC规范(http://xmlrpc.scripting.com/spec)中所要求的方法“System.ListMethods”。
为了检查该服务器是否遵循XML RPC规范,我创建了一个客户端,使我能够向服务器发送Post请求,发送我想要的XML文件(我将其编写为一个Sring,然后由客户端发送)。
然后,我的客户机打印服务器XML响应。
它起作用了,但当我发布这个请求时:
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
它给我的答复是:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse xmlns:ex="http://ws.apache.org/xmlrpc/namespaces/extensions">
<params>
<param>
<value><array><data>
<value>system.listMethods</value>
<value>system.methodSignature</value>
<value>system.methodHelp</value>
<value>Calculator.add</value>
<value>Calculator.subtract</value>
</data></array></value>
</param>
</params>
</methodResponse>
按照规范,哪一个是“错误的”。这是我的方法的列表,但它们是结构中缺少的东西。例如,它们应该是:
<value><string>system.listMethods</string></value>
产生于
<value>system.listMethods</value>
在我的服务器中,“System.ListMethods”方法返回一个object[]类型的Java对象(我尝试将它更改为String[],但它不影响结果)。根据apache文档(http://ws.apache.org/xmlrpc/types.html),这个Java类型应该转换成我应该使用的XML-RCP数组类型。
怎样做才能使我的服务器遵循XML-RCP规范?
在这种情况下,我只需在某个地方添加“
”或“”,但如规范数组类型示例所示,我应该能够混合数据类型:
<array>
<data>
<value><i4>12</i4></value>
<value><string>Egypt</string></value>
<value><boolean>0</boolean></value>
<value><i4>-31</i4></value>
</data>
</array>
所以我试着找到一个解决方案,使我也能做到这一点。
我终于找到了怎么做的方法,所以如果有人感兴趣的话,下面是我是怎么做的:
我创建了一个“自定义数据类型”,如此处同名部分所述:http://ws.apache.org/xmlrpc/advanced.html
我还必须查看org.apache.xmlrpc.serializer.StringSerializer和org.apache.xmlrpc.common.TypeFactoryImpl的源代码(可在以下GrepCode上找到:http://GrepCode.com/file/repo1.maven.org/maven2/org.apache.xmlrpc/xmlrpc-common/3.1.3/org/apache/xmlrpc/common/TypeFactoryImpl.java#TypeFactoryImpl.0String_Serializer)
我必须创建两个类:
MystringSerializer:
import org.apache.xmlrpc.serializer.*;<br>
import org.xml.sax.ContentHandler;<br>
import org.xml.sax.SAXException;
public class MyStringSerializer extends TypeSerializerImpl {
// Tag name of an string.
public static final String STRING_TAG = "string";
public void write(ContentHandler pHandler, Object pObject) throws SAXException {
write(pHandler, STRING_TAG, pObject.toString());
}
}
MyTypeFactory(要调用的方法而不是TypeFactoryImpl):
import org.apache.xmlrpc.common.TypeFactoryImpl;<br>
import org.apache.xmlrpc.common.XmlRpcController;<br>
import org.apache.xmlrpc.common.XmlRpcStreamConfig;<br>
import org.apache.xmlrpc.serializer.TypeSerializer;<br>
import org.xml.sax.SAXException;<br>
public class MyTypeFactory extends TypeFactoryImpl {
public MyTypeFactory(XmlRpcController pController) {
super(pController);
}
public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig, Object pObject) throws SAXException {
if (pObject instanceof String){
return new MyStringSerializer();
}else{
return super.getSerializer(pConfig, pObject);
}
}
}
我试图使用第三方Web服务(基于php)在asp.netc#应用程序,但失败的服务配置。已经尝试添加服务/Web引用-所有相同的错误: 响应消息的内容类型 text/html 与绑定的内容类型不匹配(text/xml;charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupport 方法。响应的前 402 个字节是:” [已手动编辑响应以正确显示 对我来
Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht
错误响应 状态:400 消息:“用户ID和密码错误” 在这里,我可以获得或处理成功数据,但不能获得或处理错误数据,因为在catch函数中,只有错误对象被传递,而错误对象只包含来自服务器的响应代码,而不是响应数据
问题内容: 我有一个新编码的GWT / GAE应用,该应用在客户端上使用RequestFactory和Editors,在背面使用自定义的Objectify DAO服务。 flush()然后persist()路径在成功时可以正常工作。客户端JSR 303也可以正常工作。 我的问题是如何触发服务器警告/错误并处理UI更新? 我在http://turbomanage.wordpress.com/2010
这将返回有效用户的调用状态。例如,如果用户是有效的,并且存在状态,则以纯文本形式返回“Active”。如果没有有效用户,则返回#1005的错误代码 我可以像这样添加自定义转换器工厂(在web上找到) 但我没看到有什么不同。此外,它还可以很好地将JSON伪装成普通文本,并破坏所有现有服务。有没有更好的方法来处理这种情况?我想过为纯文本提供单独的改型实例,虽然有点脏。你还有其他的建议/解决办法吗?
我正在尝试上传一个xml文件。当使用MultipartEntityBuilder将二进制格式的文件添加到HttpEntity时,我收到以下错误 我已经通过了链接 https://www.baeldung.com/httpclient-multipart-upload 我的理解是,该文件不被接受,因为http实体无法发送MultipartEntityBuilder,但我可能错了。