访问webservice参为xml格式的解决方法(Primeton ESB)

5年前

当SoapUI访问一个webservice时,对于某些webserive服务,如果webserive的输入参数要求是xml格式,如果xml格式输入不正确,会报“Unmarshalling Error: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs. at [row,col {unknown-source}]: [9,14]”的错误信息。

问题描述


当SoapUI访问一个webservice时,对于某些webserive服务,如果webserive的输入参数要求是xml格式,如果xml格式输入不正确,会报“Unmarshalling Error: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs. at [row,col {unknown-source}]: [9,14]”的错误信息。


客户现场案例描述:


某客户ESB支持时,客户这边提供一个发送短信的webservice,其中一个输入参数要求是xml格式,如下图所示:



 错误1:当将xml格式的输入参数(即<xmlbody>内容)设置为:

<SmsPush>

<phone>13600000000</phone>

<content>This is a test sms ! </content>

<sendTime/>

<transactionId/>

</SmsPush>

时,进行webservice调用,报错如下:

Unmarshalling Error: unexpected element (uri:"", local:"SmsPush"). Expected elements are (none)


如下图所示:



 错误2:添加<xml>标头信息后,当将xml格式的输入参数(即<xmlbody>内容)设置为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<SmsPush>

<phone>13600000000</phone>

<content>This is a test sms ! </content>

<sendTime/>

<transactionId/>

</SmsPush>

时,进行webservice调用,报错如下:

Unmarshalling Error: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs.at [row,col {unknown-source}]: [9,15]


如下图所示:



 正确xml参数输入格式:

将xml格式的输入参数(即<xmlbody>内容)设置为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <SmsPush> <phone>13679122863</phone> <content>this is test </content> <sendTime/> <transactionId/> </SmsPush>


如下图所示:



这样再进行webservice调用,就可以调用成功了。如下图所示:



解释:

对于问题1所出现的错误,是因为输入参数要求要xml格式,而所给出的参数没有添加<?xml version="1.0" encoding="UTF-8"?>,所以其形式并不满足xml标准,因此不能够成功调用成功。

对于问题2所出现的错误,虽然输入参数已经符合xml的标准格式,但是由于转义符号的原因,所以出现了这样的错误。

因此,在输入xml格式的参数时,首先需要添加<?xml version="1.0" encoding="UTF-8"?>(注意:这一行必须出现在第一行,并且需要顶格,前面没有任何空格或其他字符),使得输入参数符合xml标准;其次对于转义字符,需要进行改变。

在这里,列举出常用的一些转义字符:


特殊符号

代码

<

&lt; 

>

&gt; 

"

&quot;

&amp;

版权标志

&copy; 

商标标志

&reg;

空格

&nbsp;

.

&#8226


ps: 如何利用EOS调试快速替换转义字符?


在EOS中设置一个变量String_xml,将它的value值设置为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<SmsPush>

<phone>15991264030</phone>

<content>This is a test sms ! </content>

<sendTime/>

<transactionId/>

</SmsPush>

如下图所示:



然后启动调试,设置断点后,查看该变量,能够从value值中看到此xml字符串的转义字符已经经过了转换。如下图所示:



COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。