我正在与.Net网络服务进行互动。根据服务描述,服务器期望base64Binary类型。
这就是我尝试构建SOAP数据包的方式:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
</soap:Header>
<soap:Body>
<uploadFile xmlns="http://localhost/">
<FileDetails>
<ReferenceNumber>123</ReferenceNumber>
<FileName>testfile</FileName>
<FullFilePath>file</FullFilePath>
<FileType>1</FileType>
<FileContents>{request.getContent().array()}</FileContents>
</FileDetails>
</uploadFile>
</soap:Body>
</soap:Envelope>
在上面的代码段中,request.getContent().array()
是我从PhoneGap开发的移动应用程序收到的HTTP请求。
服务器响应FileContents无效。有什么想法吗?
答案 0 :(得分:1)
您当前的版本只是将字节(我假设request.getContent().array()
是一个字节数组)写为空格分隔的基数为10的整数:
scala> val bytes = 1 to 10 map(_.toByte) toArray
bytes: Array[Byte] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> <FileContents>{bytes}</FileContents>
res0: scala.xml.Elem = <FileContents>1 2 3 4 5 6 7 8 9 10</FileContents>
这绝对不是你想要的。您可以使用像Apache Commons Codec这样的库将字节数组编码为字符串(这里我使用的是Base64
encoder):
scala> import org.apache.commons.codec.binary.Base64
import org.apache.commons.codec.binary.Base64
scala> <FileContents>{Base64.encodeBase64String(bytes)}</FileContents>
res1: scala.xml.Elem = <FileContents>AQIDBAUGBwgJCg==</FileContents>
您可能需要稍微修改一下选项,但这更有可能是您需要的。