使用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>
}
这是正确的方法吗?
答案 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,然后以字符串形式返回。
希望这有帮助,