我们使用GSoap发送SOAP请求,并处理响应。但是,我们遇到了一个问题,因为远程服务器使用包含以下内容的XML回复:
< ax21:attributes xsi:type =" axis2ns9259:anyType">
ax21名称空间和xsi名称空间在上面的元素中定义,这很好(xsi是"标准" xmlns:xsi =" http://www.w3 .ORG / 2001 / XMLSchema的实例&#34)。但是,axis2ns9259命名空间是未知的(据我所知 - 在文档中的任何地方都没有提到它)。 GSoap并不喜欢它,并退出时出现错误,告诉我们类型不匹配。
然而,阅读XML规范,似乎" anyType" type存在于所有名称空间中(事实上,它是该名称空间的类型层次结构的" root" ur-type)。此类型接受ANYTHING(任意数量的元素和/或属性)
所以,我想知道:GSoap是否太严格"在这里,或者服务器是否应该定义这个命名空间,即使我们应该能够知道这种类型是什么?
我们不知道我们是否应该"纠正"我们的代码(也就是说,可能是屠夫GSoap以便它接受这个),或者责怪服务器发送错误的XML(格式正确,但无效 - 实际上,他们甚至不提供XSD或DTD)
答案 0 :(得分:0)
这不是架构有效的。规则在XML Schema 1.0第1部分第1.3.3节中:
4如果元素中有属性信息项 信息项的[attributes]与[namespace name]相同 http://www.w3.org/2001/XMLSchema-instance和[本地名称] 类型,然后所有以下必须为真:
4.1对于内置的QName简单类型,该属性信息项的规范化值必须是·有效的,如 字符串有效(§3.14.4);
在您的示例中,xsi:type不是有效的QName,因为前缀尚未声明。
(我似乎记得在过去使用Axis生成的命名空间时遇到很多麻烦。)