【问题标题】:base64binary to string with XQUERYbase64binary 到带有 XQUERY 的字符串
【发布时间】:2014-06-03 15:28:21
【问题描述】:

使用 Oracle ESB 11g,我需要转换 Web 服务的结构,但我的 xml 类型有问题,源 Web 服务的类型为 base64binary 但我的模型是字符串类型。

来源类型

<xsd:element
name="MyDocument"
maxOccurs="1"
minOccurs="0"
type="xsd:base64Binary"
></xsd:element>

目的地类型

<xs:element name="myBase64file" type="xs:string" minOccurs="0"/>

为什么目的地是字符串?因为我在 Java 中的模型返回一个字符串

         InputStream stream =  this.getClass().getClassLoader().getResourceAsStream("doc3.pdf");
         byte[] bytes = IOUtils.toByteArray(stream);
         byte[] bytes64 = Base64.encodeBase64(bytes);
         myBase64file = new String(bytes64); 

但现在真正的服务返回 base64binary :(

在 XQuery Mapper 中使用 oepe(Oracle OSB 的 Eclipse 更多插件),我尝试进行这样的硬转换

 {
 for $MyDocument in $MyData/ns2:MyDocument
 return <myBase64file>{ data($MyDocument) }</myBase64file>
 }

这是正确的方法吗?

【问题讨论】:

    标签: base64 xquery osb


    【解决方案1】:

    我认为要实现您的目标,有必要使用 XQuery,因为您想将元素名称从 myDocument 更改为 myBase64file,即使您的目标元素类型是 xs:base64Binary,您也需要执行 XQuery。

    但是 xs:base64Binary 表示基本上是一个字符串,限制为 65 个字母字符:a-z、A-Z、0-9、加号 (+)、正斜杠 (/) 和等号 (=),以及空格字符 (#x20) (base64Binary),因此您可以认为 xs:base64binary 是一个带有 xs:restriction 的 xs:string,您只能使用上述字符。因此,如果您更喜欢使用 xs:base64Binary 而不是 xs:string,您可以将目标类型更改为 xs:base64Binary:

    &lt;xs:element name="myBase64file" type="xs:base64Binary" minOccurs="0"/&gt;

    并且您的 java 模型代码非常适合这种类型,因为您将数据编码为 base64,然后以字符串形式返回。

    希望这会有所帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多