2017-06-29 5 views
1

Ich habe einen SOAP-Client in Java mit Apache CXF (mit wsdl2java) implementiert. Ich wurde gebeten, den Soap-Header mit einem benutzerdefinierten Header-Block zu erweitern. Dies ist, wie der Header aussehen sollte:Hinzufügen benutzerdefinierten Header-Block in SOAP-Header

anstelle

Header structure

Die WS-Security und WS-Addressing ist schon habe ich die integrierte Funktionalität in CXF für diese (z WSS4JOutInterceptor) verwendet.

Der benutzerdefinierte Block sollte wie folgt aufgebaut sein:

<customHeader xmlns:func="http://...." xmlns="http://...."> 
    <customElement> 
     <customValue>....</customValue> 
    </customElement> 
</customHeader> 

Ich bin nicht sicher, wie der benutzerdefinierte Header-Block hinzuzufügen. Ich suche den AbstractSoapInterceptor bei der Umsetzung:

public class CustomHeaderInterceptor extends AbstractSoapInterceptor { 
    public CustomHeaderInterceptor() { 
     super(Phase.WRITE); 
     getAfter().add(WSS4JOutInterceptor.class.getName()); 
    } 

    @Override 
    public void handleMessage(SoapMessage message) throws Fault { 
     .... 
    } 

}

jedoch sicher, dass mir nicht genau, was hier zu tun. Ich stelle auch fest, dass die message.getHeaders() leer ist. Ich habe auch die Phase.SEND versucht, und die Header-Liste ist noch leer. Die Reihenfolge der Header muss wie oben beschrieben sein. Bin ich hier auf der falschen Spur? Irgendwelche Eingaben, wie man das richtig macht, wären willkommen!

Antwort

0

Der benutzerdefinierte Header wurde mit JAXB-Annotationen erstellt und der Header-Liste in der WRITE-Phase hinzugefügt. Obwohl die Header-Liste zu diesem Zeitpunkt leer ist, wurde der benutzerdefinierte Header in der richtigen Reihenfolge hinzugefügt.

Verwandte Themen