Você está na página 1de 3

How to create Dispatch Object?

Low-level classes
it supports multiple Message Exchanging Patterns : Sync
ASynch
Fire & Forget

Invoke --Synch || Asynchr || Oneway

Dispatch Mode supports 2 ways of Messaging:--


1)MessageMode (SOAP)
2) PayloadMode
(XML)

How to communicate with provider?


Which message im giving u to dispatch?
Where is provider address location is told by Programmer?(Target
Address==portname,servicename)

1)create Dispatch object(Interface)---we dont how to create object, go to Service,


becoz still dispatch has go ===> to port
port will be known to Service....
here ask Service to create object of either STUB or Dispatch.
2) Service is also a Class that comes from JAXWS API(Interface/Abstract)
Inorder to create Service Object we need ServiceFactory to create Object
So When it comes to Dispatch API, they made Service as "Abstract" with Factory
method inside itself("Abstract")
Instead of Interface.

service service = service.createService(Qnameservice,)


Dispatch dispatch = service.createDispatch(TnameSpace,Portnm,SoapMsg)

3)How to Construct Soap XML?


Use SAAJ, One Soap Messsage will be representd by One Object called SOAPMessage

Why SOAPMEssage is provided why not Document Object?


SOAP is XML . SOAPMessage create Skelton Soap Automatically(ie Header,Body)
SOAPMessage is Interface coming from SAAJ API. I dont know how to create Object of
SOAPMessage?
go to "MessageFactory" (Default is SOAP1.1)

----------------------------------------------------------------------------
package sbinetbanking.services.dispatchapi.test;

import java.io.IOException;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.soap.SOAPBinding;
public class DispatchTest {
private static final String TARGET_NMSPACE="http://sbinetbanking/services";
private static final String TYPE_NMSPACE="http://sbinetbanking/types";
private static final String SERVICE_NM="NetbankingService";
private static final String PORT_NM="NetbankingSOAPPort";
private static final String
TARGET_ADDRESS="http://localhost:8080/netbankingweb/netbanking";

public static void main(String[] args) throws SOAPException, IOException {


Service netbankingService=Service.create(new QName(TARGET_NMSPACE,
SERVICE_NM));
netbankingService.addPort(new QName(TARGET_NMSPACE, PORT_NM),
SOAPBinding.SOAP11HTTP_BINDING, TARGET_ADDRESS);

Dispatch<SOAPMessage>
dispatch=netbankingService.createDispatch(new QName(TARGET_NMSPACE,
PORT_NM),SOAPMessage.class, Service.Mode.MESSAGE);

//define port

//construct soap XML manually


MessageFactory mf=MessageFactory.newInstance();
SOAPMessage request=mf.createMessage();

SOAPBody body=request.getSOAPBody();

//adding root element <typ:transfer> in soap body


SOAPElement transferElement =body.addChildElement(new
QName(TYPE_NMSPACE, "transfer", "typ"));

//adding fromAccount and toAccount child elements to


<transfer> element
addAccountPart(transferElement, "fromAccount", "ac123",
"rajendra", "SBITEXTPARK", "SBI1557");
addAccountPart(transferElement, "toAccount", "ac456", "ravi",
"ANDBKZJ", "ANDB063");

//adding third child element<transactionDetails> with elements


containing values
SOAPElement
transactionDetailsElem=transferElement.addChildElement("transactionDetails");

SOAPElement
amountElem=transactionDetailsElem.addChildElement("amount");
amountElem.setTextContent("4000");

SOAPElement
commentElem=transactionDetailsElem.addChildElement("comment");
commentElem.setTextContent("payment of college fee");

SOAPMessage response = dispatch.invoke(request); //sending


request to provider and getting response from provider
//request.writeTo(System.out);
response.writeTo(System.out);
}
private static void addAccountPart(SOAPElement toElement, String account,
String accountNo, String accountHolderName, String branchCode, String ifscCode)
throws SOAPException{

//creating <fromAccount> and <toAccount> child elements for


<transfer> root element
SOAPElement accountElem=toElement.addChildElement(new
Qname("typ_nm",account) account);

SOAPElement
accountNoElem=accountElem.addChildElement("accountNo");
accountNoElem.setTextContent(accountNo);

SOAPElement
accountHolderNameElem=accountElem.addChildElement("accountHolderName");
accountHolderNameElem.setTextContent(accountHolderName);

SOAPElement branchCodeElem =
accountElem.addChildElement("branchCode");
branchCodeElem.setTextContent(branchCode);

SOAPElement ifscCodeElem=accountElem.addChildElement("ifscCode");
ifscCodeElem.setTextContent(ifscCode);
}
}

Você também pode gostar