base64binary与XQUERY字符串

时间:2014-06-03 15:28:21

标签: base64 xquery osb

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

来源类型

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

目的地类型

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

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

         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(Eclipse更多针对Oracle OSB的插件)我尝试了这样的硬转换

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

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

希望这有帮助,