1

我正在与 .Net Web 服务交互。根据服务描述,服务器需要一个 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 无效。有任何想法吗?

4

1 回答 1

1

您当前的版本只是将字节(我假设request.getContent().array()是字节数组)写入以空格分隔的 base-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编码器):

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>

You might have to tinker with the options a bit, but this is much more likely to be what you need.

于 2012-03-16T17:02:46.207 回答