Friday 15 July 2011

java - Spring ClientInterceptor shows empty Soap Header in Response -



java - Spring ClientInterceptor shows empty Soap Header in Response -

i have soap service need talk to. first soap request receives response sessionid element in soap header need send in final release command.

to grab sessionid value plan on using clientinterceptor. in implementation of webservicegatewaysupport register interceptor:

this.setinterceptors(new clientinterceptor[] { new mywebserviceclientinterceptor() });

my interceptor:

public class mywebserviceclientinterceptor implements clientinterceptor { public final qname sessionid_qname = new qname("http://xml.example.com/ws/session", "sessionid"); public boolean handlefault(messagecontext context) throws webserviceclientexception { logger.info("handle fault"); homecoming true; } public boolean handleresponse(messagecontext context) throws webserviceclientexception { logger.info("handle response"); soapmessage soapmessage = (soapmessage) context.getrequest(); soapheader soapheader = soapmessage.getsoapheader(); logger.info("response header: " + soapheader.getname()); iterator<soapheaderelement> qn = soapheader.examineallheaderelements(); while (qn.hasnext()) { soapelement elem = qn.next(); logger.info(elem.tostring()); } iterator<qname> = soapheader.getallattributes(); while (an.hasnext()) { qname elem = an.next(); logger.info(elem.tostring()); } homecoming true; } public boolean handlerequest(messagecontext context) throws webserviceclientexception { logger.info("handle request"); homecoming true; } }

however maintain getting empty soap header. i'm running wireshark , can see sessionid token in returned soap packet @ lost what's going on. ideas?

i'm idiot. 'twas typo. needed call:

soapmessage soapmessage = (soapmessage) context.getresponse();

not:

soapmessage soapmessage = (soapmessage) context.getrequest();

full code wanting set headers on requests , receive headers on responses:

clientinterceptor receive custom soap header values:

public class mywebserviceclientinterceptor implements clientinterceptor { public boolean handlefault(messagecontext context) throws webserviceclientexception { homecoming true; } public boolean handleresponse(messagecontext context) throws webserviceclientexception { soapmessage soapmessage = (soapmessage) context.getresponse(); soapheader soapheader = soapmessage.getsoapheader(); iterator<soapheaderelement> qn = soapheader.examineheaderelements(my_sessionid_qname); while (qn.hasnext()) { soapelement elem = qn.next(); soapheaderelement headerelem = (soapheaderelement) elem; if (stringutil.validstring(headerelem.gettext())) { if (!headerelem.gettext().equals(sessionid)) { sessionid = headerelem.gettext(); logger.info("bound session id: " + sessionid); } } } homecoming true; } public boolean handlerequest(messagecontext context) throws webserviceclientexception { homecoming true; } }

where utilize interceptor:

public class mysoapclient extends webservicegatewaysupport { public mysoapclient() { this.setinterceptors(new clientinterceptor[] { new mywebserviceclientinterceptor() }); ... } ... }

callback set custom soap header: class mysoapactioncallback implements webservicemessagecallback {

public void dowithmessage(webservicemessage message) throws ioexception, transformerexception { saajsoapmessage soapmessage = (saajsoapmessage) message; soapheaderelement messageid = soapmessage.getsoapheader().addheaderelement(sessionid_qname); if (stringutil.validstring(sessionid)) { messageid.settext(sessionid); } } }

where utilize callback:

jaxbelement<returntype> result = (jaxbelement<returntype>) getwebservicetemplate().marshalsendandreceive(of.createrelease(null), new mysoapactioncallback());

java spring web-services soap

No comments:

Post a Comment