我目前正在修改一个商业应用程序的文档文字SOAP服务,该应用程序可以向前和向后传输有关客户的数据。
刚刚确定了传输扫描文档图像的新要求。我遇到的问题是我使用的专有语言不支持SOAP附件。
正在传输的图像可以是任何高达32KB的图像。
我能想到的唯一解决方案是对图像进行base64编码,并将其作为XML文档的一个元素传递。
这感觉真的很糟糕,但我想不出更好的事情。
有什么想法吗?
编辑:我忘了提到图像没有远程保存在文件系统中,它存储在Oracle数据库中,我没有能力直接连接到,答案 0 :(得分:5)
如果您使用XML作为数据传输机制,则必须以某种方式对图像进行编码。原因是XML是一种文本格式,XML处理器将尝试解码二进制数据,就像它的文本一样(更具体地说,就好像它是UTF-8,除非你指定不同的编码)。此外,XML明确禁止使用多个字符(XML 1.0的大多数ASCII非printables,XML 1.1的\ u0000),因此如果只是将图像数据转储到(例如)CDATA部分,则会损坏数据。
编辑:XML Schema定义了"base64Binary"类型,因此您应该能够适当地定义WSDL(假设您使用的是自动编组器)。至少,您应该在包含编码内容的元素上使用"xsi:type"属性。