J'écris un intercepteur pour le test. Mais je reçois le corps du message de savon dans l'intercepteur est toujours nul.
Mon CXF est Apache-CXF-2.4.0 P>
haricot.xml est comme ceci: P>
public class MySoapInterceptorImpl extends AbstractSoapInterceptor implements IMySoapInterceptor { public MySoapInterceptorImpl() { super(Phase.WRITE ); addAfter(SoapOutInterceptor.class.getName()); } public void handleMessage(SoapMessage msg) throws Fault { // TODO Auto-generated method stub String soapContent ; SOAPMessage sm = msg.getContent(SOAPMessage.class); /*sm is always null!*/ } }
3 Réponses :
Le message dépend de la phase que vous êtes en ce moment. Vous pouvez trouver une liste avec des phases dans
Interceptor doku . Si vous essayez d'obtenir le contenu du message, vous devez trouver notre format dans lequel le message existe. Jetez un coup d'œil à getContentFormats a>. Certains des objets ne vous donneront pas le message. Le plus de temps CXF fonctionne avec des flux. Donc, l'objet de flux pourrait être rincé. p>
avec les meilleures salutations
Christian p>
Votre intercepter doit être exécuté après SAAJOUTTITTITIM (); Par exemple Weblog de Glen Mazza P>
Pour obtenir la réponse XML à partir du message SOAP, vous pouvez utiliser le "CACHEANDWRITEOutPutStream" et "CachedOutPutStreamCallback". Dans la classe de rappel, vous pouvez obtenir le message avant de fermer le flux. Dites, notre imbécileTinterceptor est "wsloggingoutinterceptor" qui peut être configuré dans le fichier de contexte comme suit: Notez que, nous avons également un intercepteur par défaut disponible avec les pots CXF.
Maintenant, dans notre propre intercepteur, nous pouvons écrire de la manière suivante pour enregistrer le message de réponse de sortie ou vous pouvez également modifier ici: P> /**
* @author asraf
* asraf344@gmail.com
*/
public class WSLoggingOutInterceptor extends AbstractLoggingInterceptor
{
public WSLoggingOutInterceptor()
{
super(Phase.PRE_STREAM );
}
@Override
public void handleMessage ( Message message ) throws Fault
{
// TODO Auto-generated method stub
OutputStream os = message.getContent ( OutputStream.class );
CacheAndWriteOutputStream cwos = new CacheAndWriteOutputStream ( os);
message.setContent ( OutputStream.class, cwos );
cwos.registerCallback ( new LoggingOutCallBack ( ) );
}
@Override
protected Logger getLogger ( )
{
// TODO Auto-generated method stub
return null;
}
}
class LoggingOutCallBack implements CachedOutputStreamCallback
{
@Override
public void onClose ( CachedOutputStream cos )
{
try
{
if ( cos != null )
{
System.out.println ("Response XML in out Interceptor : " + IOUtils.toString ( cos.getInputStream ( ) ));
}
}
catch ( Exception e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onFlush ( CachedOutputStream arg0 )
{
}
}
Vous recherchez le contenu du savon en tant que chaîne ou comme objet?