java - Web 服务的 XML : inline attachment

标签 java web-services xslt base64 attachment

我必须使用单个参数(XML 格式的字符串)调用 Web 服务。 我通过 XSLT 转换来构建它。到目前为止,一切都很好。

问题出在这个 XSD 片段上:

<xs:complexType name="Document">
    <xs:sequence>
        <xs:element name="title" type="xs:string" minOccurs="1"/>
        <xs:element name="content" type="xs:base64Binary" minOccurs="1"/>
    </xs:sequence>
</xs:complexType>

(例如)转换为以下 XML:

<attachment>
    <title>test title</title>
    <content>          
    PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Inllc
    yI/Pg0KPG1zZ3ByYXRpY2E+DQogICAgPHByYXRpY2E+DQogICAgICAgIDxwcm9jZXNzbz
    4NCiAgICAgICAgICAgIDxjb2RQcm9jZXNzbz4xPC9jb2RQcm9jZXNzbz4NCiAgICAgICA
    gICAgIDxjb2RJc3RhbnphUHJvY2Vzc28MzwvY29kSXN0YW56YVByb2Nlc3NvPg0KICAgI
    CAgICAgICAgPGNvZFN0YXRvPjYwPC9jb2RTdGF0bz4NCiAgICAgICAgPC9wcm9jZXNzbz
    4NCiAgICA8L3ByYXRpY2E+DQo8L21zZ3ByYXRpY2E+
    </content>
</attachment>

是的,你没看错:我必须将文件内容以 Base 64 二进制格式插入到 XML 文档中。

我考虑过使用 XSLT 插入占位符,然后处理 XML 文档以将其替换为实际的文件内容,但我想知道这些情况是否有任何最佳实践,也许是一些超出我知识范围的奇特 XSTL 技巧或者一些可能会派上用场的 Java 工具。

你会怎么做?

注意:我不能使用带有附件的 SOAP,并且我很清楚上述方法在附件很大的情况下很容易失败,但是在当我们的对手不肯让步的那一刻。

最佳答案

执行此操作的最佳方法可能是读取文件并通过实例化 XSLT 转换的代码以 Base64 对其内容进行编码。 Base64 字符串可以作为参数传递给转换,或者转换可以通过扩展方法请求它。

原则上,XSLT 可用于对 base64 进行编码,但是某些字节值,例如 0(对于 XML 1.0 和 XML 1.1),以及低于 0x20 的 29 个其他代码(对于 XML 1.0) ) 被禁止作为 XML 文档中的字符,这使得 XSLT 中的此类编码变得不可能。

(参见:http://projects.ischool.washington.edu/tabrooks/545/ContentManagement/PassingParameters.htm)

关于java - Web 服务的 XML : inline attachment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707237/

相关文章:

xml - 从不同的 XML 模式映射 XML 数据

Java:在 JPanel 上调用 repaint() 时,同一 JFrame 中的组件会在左上角重新绘制自己

java - 玩家对象数量超过 30 个

java - Drools 中不支持 Java 7 ("RuntimeDroolsException: value ' 1. 7' is not a valid language level")

java - 确定用户感知字符数的正确算法是什么?

php - 编写 PHP Web 服务的框架

node.js - 如何使用 Node.js 将我的家庭 PC 打造为 Web 服务器

java - 通过 Apache Camel 调用外部 Web 服务

java - XSLT:我们可以使用 abs 值吗?

xml - 来自命令行的 Saxon-HE 9.6 的换行符分隔输出