2016-03-30 6 views
1

Ich implementiere einen Webdienst, der Standard definiert jedoch, dass ich W3CEndpointReference als Teil der Anforderung empfange. Im xml es sieht etwas wie die folgenden:Abrufen der Dienst-URL von W3CEndpointReference

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

Die Sache ist ich an die Adresse Teil erhalten müssen, aber W3CEndpointReference aus irgendeinem Grunde nicht über ein öffentliches Adressfeld Accessor. Die einzige funktionierende Lösung, die ich bisher bekommen habe, die ich hasse, ist das Aufrufen von .toString() in der W3CEndpointReference und das Abrufen der Adresse mit Hilfe einer Regex.

Gibt es eine andere Möglichkeit, diese Eigenschaft heraus zu bekommen? Eine Util-Klasse oder vielleicht die Endpoint-Referenz auf den BindingProvider oder eine andere verwandte Klasse?

Ich würde mich über irgendwelche Ideen freuen. Vielen Dank im Voraus

Antwort

0

gefunden Lösung in Apache CXF Implementierung:

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

Vielleicht nicht die schönste, aber sicherlich besser als die Adresse mit regex zu extrahieren.

Verwandte Themen