我正在使用apache骆驼消费肥皂服务。我收到以下答复:
INFO 17:49:59.662 -
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:consultaCEPResponse xmlns:ns2="http://cliente.bean.master.sigep.bsb.correios.com.br/">
<return>
<bairro>zzzzzz</bairro>
<cep>000000</cep>
<cidade>tttttt</cidade>
<complemento2>yyyyy</complemento2>
<end>xxxxxxxx</end>
<uf>wwwww</uf>
</return>
</ns2:consultaCEPResponse>
</soap:Body>
</soap:Envelope>
我正在尝试仅获取return标记中包含的内容。但是我收到以下错误:
前缀必须解析为名称空间:ns2
但是当我将前缀更改为ns2时,它要求前缀为soap。
我该怎么做才能获得return标签内的内容?
这是我的代码:
public class RotaEnviaPedidos {
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file:pedidos?noop=true")
.setHeader(Exchange.HTTP_METHOD,simple("POST"))
.to("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente")
.transform().xpath("/soap:Envelope/soap:Body/ns2:consultaCEPResponse/return/text()",
new Namespaces("soap","http://schemas.xmlsoap.org/soap/envelope"))
.log("${body}");
}
});
context.start();
Thread.sleep(20000);
context.stop();
}
}
答案 0 :(得分:1)
您可能应该在XPath表达式中添加缺少的名称空间声明。像这样的东西:
transform().xpath("/soap:Envelope/soap:Body/ns2:consultaCEPResponse/return//text()",
new Namespaces("soap", "http://schemas.xmlsoap.org/soap/envelope/")
.add("ns2", "http://cliente.bean.master.sigep.bsb.correios.com.br/"))
如果这行不通,一种方法也可以是:
transform().xpath("//*[local-name()='return']//text()")
注意:由于没有文本直接来自return元素,因此我在您的XPath表达式(/
)中添加了一个//text()
。