java - 从 W3CEndpointReference 获取服务 URL

标签 java web-services soap jax-ws

我正在实现一个 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/

相关文章:

c++ - OnvifClientPTZ onvif c++ 无法获取配置选项

java - 如何使哈希码(整数值)为正

java - 当自动提交设置为 false 时,select 是否返回最后插入的行?

java - Java ArrayList中的contains()方法是否使用二分查找?

java - 检查所选武器并绘制而无需字段名称重复的最佳方法

java - 改造库的post方法错误

c# - PHP-C#双向通信

java - 如何在 postman 中显示异常消息?

java - Objective C 到 Android XML 响应

asp.net - 从 jQuery 调用 ASP.NET ASMX Web 服务