JAX – WS – 15 – SOAPHandler Client Side
Merhaba arkadaslar
Bu bolumde SOAPHandler konusuna devam edecegiz ve bir onceki bolumde Server Side’ini yaptigimiz uygulamanin Client Side tarafini tamamlayacagiz.
wsimport
Onceki bolumde yaptigimiz projeyi kullanacagiz (injavawetrust.jaxws.soaphandler.service) ve Web Service i publish edelim. Sonrasinda command line da , wsimport komutu ile Client dosyalarimizi olusturalim.
wsimport -keep http://localhost:8888/injavawetrust/hello.jaxws?wsdl
Client Handler
Simdi de Client Side’ta calisacak SOAPHandler implementasyon sinifimizi yazalim.
Bir onceki bolumde oldugu gibi handleMessage metodunu kullanacagiz.
SOAPMessage -> SOAPEnvelope -> SOAPHeader objesini elde ediyoruz.
Sonrasinda addHeaderElement metodunu kullaniyoruz.
Yeni bir element ekliyoruz , degerini addTextNode ile ekledik.
Sonrasinda saveChanges metodu ile islemi tamamliyoruz.
TokenClientHandler.java
package ws.handler; import java.util.Set; import javax.xml.namespace.QName; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPHeader; import javax.xml.soap.SOAPHeaderElement; import javax.xml.soap.SOAPMessage; import javax.xml.ws.handler.MessageContext; import javax.xml.ws.handler.soap.SOAPHandler; import javax.xml.ws.handler.soap.SOAPMessageContext; public class TokenClientHandler implements SOAPHandler<SOAPMessageContext> { @Override public boolean handleMessage(SOAPMessageContext context) { // Standard property: message direction, true for outbound messages, // false for inbound. Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); //If it is an outgoing message if (outbound) { System.out.println("TokentClientHandler # handleMessage..."); try { SOAPMessage soapMsg = context.getMessage(); SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); SOAPHeader soapHeader = soapEnv.getHeader(); // add the property to the header QName qname = new QName("http://service.ws.injavawetrust/", "TOKEN"); // Create a new HeaderElement in order to place the new property SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(qname); soapHeaderElement.setActor(SOAPConstants.URI_SOAP_ACTOR_NEXT); soapHeaderElement.addTextNode("token12345"); soapMsg.saveChanges(); } catch (SOAPException e) { e.printStackTrace(); } } return true; } @Override public boolean handleFault(SOAPMessageContext context) { return false; } @Override public void close(MessageContext context) { } @Override public Set<QName> getHeaders() { return null; } }
XML Configuration
handler-client-config.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <javaee:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <javaee:handler-chain> <javaee:handler> <javaee:handler-class>ws.handler.TokenClientHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </javaee:handler-chains>
@HandlerChain
@HandlerChain annotation’ini wsimport ile olusturdugumuz MessageWriterImplService sinifina ekleyelim.
MessageWriterImplService.java
/** * This class was generated by the JAX-WS RI. * JAX-WS RI 2.2.9-b130926.1035 * Generated source version: 2.2 * */ @WebServiceClient(name = "MessageWriterImplService", targetNamespace = "http://service.ws/", wsdlLocation = "http://localhost:8888/injavawetrust/hello.jaxws?wsdl") @HandlerChain(file="ws/config/handler-client-config.xml") public class MessageWriterImplService extends Service { /// /.. }
Client And Run Application
Client.java
package ws.client; import java.net.MalformedURLException; import ws.service.MessageWriterImplService; public class Client { public static void main(String[] args) throws MalformedURLException { MessageWriterImplService s = new MessageWriterImplService(); String msg = s.getMessageWriterImplPort().getWelcomeMessage("levent", "erguder"); System.out.println(msg); } }
Ornegi calistirdigimizda;
TokentClientHandler # handleMessage... Welcome , levent erguder. This message is sent by MessageWriterImpl#getWelcomeMessage.
TokenHandler#handleMessage working... token12345 Valid Token <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header> <TOKEN xmlns="http://service.ws.injavawetrust/" SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next">token12345</TOKEN> </SOAP-ENV:Header> <S:Body> <ns2:getWelcomeMessage xmlns:ns2="http://service.ws/"> <name>levent</name> <surname>erguder</surname> </ns2:getWelcomeMessage> </S:Body> </S:Envelope>
Note : Eclipse Console’da menude uygulamalar arasindaki output icin degisiklik yapmamiz gerekli. (Display Selected Console)
Leave a Reply