2016-03-30 7 views
1

私はWebサービスを実装していますが、標準では要求の一部としてW3CEndpointReferenceを受け取ることを定義しています。 XMLでは、それは多少、以下のようになります。サービスURLをW3CEndpointReferenceから取得する

<b:ConsumerReference> 
     <add:Address>http://localhost:8088/NotificationConsumer?wsdl</add:Address> 
     <!--Optional:--> 
     <add:ReferenceParameters/> 
     <!--Optional:--> 
     <add:Metadata/> 
</b:ConsumerReference> 

事は、私はアドレス部分を取得する必要があるが、いくつかの理由のために値のW3CEndpointReferenceがパブリックアドレスフィールドのアクセサを持っていません。 これまでに私が嫌う唯一の解決策は、W3CEndpointReferenceで.toString()を呼び出し、正規表現を使用してアドレスを取得することです。

このプロパティを取得する他の方法はありますか?いくつかのutilクラスまたはBindingProviderまたは他の関連するクラスへのエンドポイント参照のキャスト

私は任意のアイデアに感謝します。 ApacheのCXFの実装で見つかった事前

答えて

0

ソリューションのおかげで:

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; 
} 

たぶんないきれいな、確かに正規表現でアドレスを抽出するよりも良いです。

関連する問題