我遇到错误:“未声明前缀'soapenv'的命名空间。” 。
我正在使用Spring的WebServiceTemplate发出请求,并使用此代码获取响应。
public String getRegistroUnico() {
String xmlRequest = this.getPeticion();
StreamSource peticion = new StreamSource(new StringReader(xmlRequest));
DOMResult respuesta = new DOMResult();
String numeroRU = null;
boolean hayRespuesta = webServiceTemplate.sendSourceAndReceiveToResult(URI, peticion, respuesta);
if (hayRespuesta){
numeroRU = this.resultToRegistroUnico((Document) respuesta.getNode());
}
return numeroRU;
}
/**
* @return Genera la petición (payload) que se enviará al servicio Web
*/
private String getPeticion(){
StringBuffer buffer = new StringBuffer(1024);
buffer.append("<ws:RegistrarEntrada xmlns:ws=\"http://ws.rtaws.rtaws.jccm.es\"> ");
buffer.append("<sUsuario>user</sUsuario>");
buffer.append("<sClave>pass</sClave>");
buffer.append("<strXML>");
buffer.append("<Datos>DATA</Datos>");
buffer.append("</strXML>");
buffer.append("</ws:RegistrarEntrada>");
return buffer.toString();
}
/**
* @return Devuelve una lista de Libro a partir del DOM
*/
private String resultToRegistroUnico(Document doc){
NodeList nodos = doc.getFirstChild().getChildNodes();
Node current = null;
String numeroRU = null;
for (int i = 0, num = nodos.getLength(); i < num; i++){
current = nodos.item(i);
System.out.println(current);
}
return numeroRU;
}
我已经用WireShark捕获了数据,这就是结果。
请求(wireshark)
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header/>
<env:Body>
<ws:RegistrarEntrada xmlns:ws="http://ws.rtaws.rtaws.jccm.es">
<sUsuario>user</sUsuario>
<sClave>pass</sClave>
<strXML>
<Datos>DATA</Datos>
</strXML>
</ws:RegistrarEntrada>
</env:Body>
</env:Envelope>
响应(wireshark)
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:RegistrarEntradaResponse soapenv:encodingStyle="http://www.w3.org/2003/05/soap-encoding" xmlns:ns1="http://ws.rtaws.rtaws.jccm.es">
<ns2:result xmlns:ns2="http://www.w3.org/2003/05/soap-rpc">RegistrarEntradaReturn</ns2:result>
<RegistrarEntradaReturn xsi:type="ns3:string" xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/">
<?xml version="1.0" encoding="iso-8859-1"?><RTA-JCCM></RTA-JCCM>
</RegistrarEntradaReturn>
</ns1:RegistrarEntradaResponse>
</soapenv:Body>
</soapenv:Envelope>
在SoapUI上执行相同请求的响应完全不同
您可以在图像中看到,在Java代码的响应中添加了<ns2:result xmlns:ns2="http://www.w3.org/2003/05/soap-rpc">RegistrarEntradaReturn</ns2:result>
行,就像在wireshark响应中看到的那样,所以我认为解决方案可能是用Java代码解析响应删除该节点。
我该怎么做?这是最好的解决方案吗?