我在VS 2015中生成客户端代理时遇到问题,其中从WSDL生成的引用将base64Binary对象解释为byte [] []。
这是WSDL部分:
<xs:complexType name="putPlanning">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="data" type="xs:base64Binary" />
</xs:sequence>
</xs:complexType>
在生成的参考文献中:
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="xxx.xxx.xxx", Order=8)]
[System.Xml.Serialization.XmlElementAttribute("data", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="base64Binary")]
public byte[][] data;
我很确定这是在Java Web服务上生成WSDL的问题,但是任何有更多经验的人都可以了解客户端或服务器端可能的原因吗? / p>
我希望base64Binary转换为string []而不是byte [] []。
这不能正常工作,因为我希望web服务需要base64字符串,但客户端代理正在强制使用byte [] []数组数组。
进一步信息:
在SOAPUI中,以下代码适用于此Web服务:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:psw="http://xxx.xxx.xxx/">
<soapenv:Header/>
<soapenv:Body>
<psw:putPlanning>
<!--Zero or more repetitions:-->
<data>*base64string==*</data>
<data>*base64string==*</data>
</psw:putPlanning>
</soapenv:Body>
</soapenv:Envelope>
所以这告诉我一个base64字符串数组(实际的base64字符串因为它们太长而被忽略)被接受了。所以问题是,为什么Visual Studio会根据WSDL生成byte [] []数据类型?
答案 0 :(得分:0)
默认情况下,JAXB使用byte[]
xsd数据类型的Base64Binary
映射。
所有这些绑定都可以通过自定义绑定声明在全局或逐个案例级别上覆盖。