使用ESB的business service调用OBAM的DataObjectOperationsByName web 服务,试图往Employees数据对象插入一条记录,
测试输入如下:
<bam:Insert xmlns:bam="http://xmlns.oracle.com/bam">
<!--Optional:-->
<bam:xmlPayload>
<DataObject Name="Employees" Path="/Samples">
<Contents>
<Row>
<Column Name="Salesperson" Value="Greg Jinyn" />
<Column Name="Sales Area" Value="Northeast" />
<column Name="Sales Number" Value="5671" />
</Row>
</Contents>
</DataObject>
</bam:xmlPayload>
</bam:Insert>
结果遇到错误:
BAM-06147: DataObjectOperations Web 服务的 XML 有效负载无效; nested exception is:
java.rmi.RemoteException: BAM-06147: DataObjectOperations Web 服务的 XML 有效负载无效; nested exception is:
java.lang.RuntimeException: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [2,0]
仔细研究后发现,<bam:xmlPayload>String</bam:xmlPayload>,传入的内容为字符串,而上面的demo会让xml解析器认为是新的xml元素非string,因此可通过encode解决该问题。
解决方法有两种:
一、xml通常认为“<”是新的xml元素的开始,对于少量的可以简单的将“<”替换成"<"即可;
二:当<bam:xmlPayload>间需要包含大量的xml内容时,可使用<![CDATA[ ]]>的方式将内容包含进来,xml解析时遇到CDATA即跳过不解析。
--转自