我正在实现一个 Web 服务,但是标准定义我接收 W3CEndpointReference 作为请求的一部分。在 xml 中,它看起来有点像以下内容:
<b:ConsumerReference>
<add:Address>http://localhost:8088/NotificationConsumer?wsdl</add:Address>
<!--Optional:-->
<add:ReferenceParameters/>
<!--Optional:-->
<add:Metadata/>
</b:ConsumerReference>
问题是我需要访问地址部分,但由于某种原因,W3CEndpointReference 没有公共(public)地址字段访问器。 到目前为止,我得到的唯一可行的解决方案是在 W3CEndpointReference 上调用 .toString() 并使用正则表达式获取地址,这也是我讨厌的。
还有其他办法可以把这个属性(property)拿出来吗?某个 util 类或者可能将端点引用强制转换为 BindingProvider 或其他相关类?
如果有任何想法,我将不胜感激。提前致谢
最佳答案
在 Apache CXF 实现中找到的解决方案:
public String getWSAAddress(W3CEndpointReference ref) {
Element element = DOMUtils.createDocument().createElement("elem");
ref.writeTo(new DOMResult(element));
NodeList nl = element.getElementsByTagNameNS("http://www.w3.org/2005/08/addressing", "Address");
if (nl != null && nl.getLength() > 0) {
Element e = (Element) nl.item(0);
return DOMUtils.getContent(e).trim();
}
return null;
}
也许不是最漂亮的,但肯定比使用正则表达式提取地址更好。
关于java - 从 W3CEndpointReference 获取服务 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320979/