SOAP 解组错误:意外元素
Posted
技术标签:
【中文标题】SOAP 解组错误:意外元素【英文标题】:SOAP Unmarshalling Error: unexpected element 【发布时间】:2021-10-02 10:28:44 【问题描述】:我很难理解这个错误,也很难在网上找到答案。我正在尝试从“correios”使用 Postman 中的 API,但出现此错误:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: elemento inesperado (uri:"http://service.objetopostado.cws.correios.com.br/", local:"codigoObjeto"). Os elementos esperados são <codigoObjeto> </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
翻译:
Unmarshalling Error: unexpected element (uri:"http://service.objetopostado.cws.correios.com.br/", local:"codigoObjeto"). The expected elements are <codigoObjeto>
这是 POST 请求的正文:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<consultarObjetoPostado xmlns="http://service.objetopostado.cws.correios.com.br/">
<codigoObjeto>AB123456789BR</codigoObjeto>
</consultarObjetoPostado>
</soap:Body>
</soap:Envelope>
我不明白这个错误是否仅仅是<codigoObjeto>
写错了,需要写成<codigoObjeto>
或别的什么,因为如果我写成<codigoObjeto>
它会显示另一个错误,像这样:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: Unexpected character '' (code 123) in content after '<' (malformed start element?).
at [row,col unknown-source]: [5,10] </faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
所以我真的不知道如何解决这个问题。
【问题讨论】:
【参考方案1】:问题似乎出在命名空间中:
<consultarObjetoPostado xmlns="http://service.objetopostado.cws.correios.com.br/">
<!-- Element codigoObjeto belongs to the default namespace "http://service.objetopostado.cws.correios.com.br/" -->
<codigoObjeto>AB123456789BR</codigoObjeto>
</consultarObjetoPostado>
要从 XML 级别的默认命名空间中删除 codigoObjeto
,需要提供命名空间前缀:
<ns:consultarObjetoPostado xmlns:ns="http://service.objetopostado.cws.correios.com.br/">
<codigoObjeto>AB123456789BR</codigoObjeto>
</ns:consultarObjetoPostado>
或者在元素级别提供一个空的命名空间:
<consultarObjetoPostado xmlns="http://service.objetopostado.cws.correios.com.br/">
<codigoObjeto xmlns="">AB123456789BR</codigoObjeto>
</consultarObjetoPostado>
客户端实现可能会有所不同,具体取决于用于构建和发送请求的语言和框架。
【讨论】:
感谢您的帮助。我已经尝试了您提出的两种解决方案,第二个有效,它没有显示任何错误。现在发生的奇怪事情是以上是关于SOAP 解组错误:意外元素的主要内容,如果未能解决你的问题,请参考以下文章
javax.xml.ws.soap.SOAPFaultException:解组错误:从AXIS迁移到CXF后出现意外元素(uri:“”,local:“fault”)
Jaxb UnMarshal 错误:意外元素(uri:“”,本地:“processedSalesOrderTypeList”)。预期的元素是
javax.xml.bind.UnmarshalException:意外元素。预期元素是(无)
在 SOAP 请求 .NET CORE 2.2 上发送的 Http.WinHttpException。收到的消息是意外的或格式错误