KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jbpm > bpel > service > def > BpelEndpointHandlerTest


1 package org.jbpm.bpel.service.def;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.Serializable JavaDoc;
5 import java.util.HashMap JavaDoc;
6
7 import javax.jms.*;
8 import javax.naming.Context JavaDoc;
9 import javax.naming.InitialContext JavaDoc;
10 import javax.wsdl.Definition;
11 import javax.xml.namespace.QName JavaDoc;
12 import javax.xml.rpc.handler.HandlerInfo JavaDoc;
13 import javax.xml.rpc.handler.soap.SOAPMessageContext JavaDoc;
14 import javax.xml.soap.MessageFactory JavaDoc;
15 import javax.xml.soap.SOAPMessage JavaDoc;
16
17 import junit.framework.TestCase;
18
19 import org.w3c.dom.Element JavaDoc;
20
21 import org.jbpm.bpel.bar.BarApplication;
22 import org.jbpm.bpel.def.BpelDefinition;
23 import org.jbpm.bpel.def.ImportsDefinition;
24 import org.jbpm.bpel.messager.MessagerService;
25 import org.jbpm.bpel.par.JndiProcessDeployer;
26 import org.jbpm.bpel.wsdl.def.PartnerLinkType;
27 import org.jbpm.bpel.wsdl.util.WsdlUtil;
28 import org.jbpm.bpel.xml.BpelConstants;
29 import org.jbpm.bpel.xml.BpelReader;
30 import org.jbpm.bpel.xml.util.NodeUtil;
31
32 /**
33  * @author Alejandro Guízar
34  * @version $Revision: 1.10 $ $Date: 2005/06/23 02:17:26 $
35  */

36 public class BpelEndpointHandlerTest extends TestCase {
37   
38   private BpelEndpointHandler handler;
39   private MessagerService messagerService;
40   private Context JavaDoc initialContext;
41   private JndiProcessDeployer deployer;
42   
43   private static final String JavaDoc WSDL_TEXT =
44     "<definitions targetNamespace='http://jbpm.org/bpel/examples'" +
45     " xmlns:tns='http://jbpm.org/bpel/examples'" +
46     " xmlns:xsd='http://www.w3.org/2001/XMLSchema'" +
47     " xmlns:bpws='http://schemas.xmlsoap.org/ws/2004/03/business-process/'" +
48     " xmlns:plnk='http://schemas.xmlsoap.org/ws/2004/03/partner-link/'" +
49     " xmlns='http://schemas.xmlsoap.org/wsdl/'>" +
50     " <message name='request'>" +
51     " <part name='simplePart' type='xsd:string'/>" +
52     " <part name='elementPart' element='tns:surpriseElement'/>" +
53     " </message>" +
54     " <message name='response'>" +
55     " <part name='intPart' type='xsd:int'/>" +
56     " <part name='complexPart' type='tns:complexType'/>" +
57     " </message>" +
58     " <portType name='pt'>" +
59     " <operation name='op'>" +
60     " <input message='tns:request'/>" +
61     " <output message='tns:response'/>" +
62     " </operation>" +
63     " </portType>" +
64     " <plnk:partnerLinkType name='plt'>" +
65     " <plnk:role name='r1' portType='tns:pt'/>" +
66     " </plnk:partnerLinkType>" +
67     " <bpws:property name='nameProperty' type='xsd:string'/>" +
68     " <bpws:property name='idProperty' type='xsd:int'/>" +
69     " <bpws:propertyAlias propertyName='tns:nameProperty' messageType='tns:request'>" +
70     " <bpws:query>elementPart/tns:surpriseElement/c/@name</bpws:query>" +
71     " </bpws:propertyAlias>" +
72     " <bpws:propertyAlias propertyName='tns:idProperty' messageType='tns:request'>" +
73     " <bpws:query>elementPart/tns:surpriseElement/e</bpws:query>" +
74     " </bpws:propertyAlias>" +
75     "</definitions>";
76   private static final String JavaDoc REQUEST_ENV_TEXT =
77     "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>" +
78     "<soapenv:Body>" +
79     "<foo:op xmlns:foo='urn:someURI'>" +
80     " <simplePart>wazabi</simplePart>" +
81     " <elementPart>" +
82     " <tns:surpriseElement xmlns:tns='http://jbpm.org/bpel/examples'>" +
83     " <b on=\"true\">true</b>" +
84     " <c name=\"venus\"/>" +
85     " <d amount=\"20\"/>" +
86     " <e>30</e>" +
87     " </tns:surpriseElement>" +
88     " </elementPart>" +
89     "</foo:op>" +
90     "</soapenv:Body>" +
91     "</soapenv:Envelope>";
92   private static final String JavaDoc RESPONSE_ELEM_TEXT =
93     "<vendor:msg0 xmlns:vendor='http://jbpm.org/bpel/examples'>" +
94     " <intPart>2020</intPart>" +
95     " <complexPart attributeOne='hi' attributeTwo='ho'>" +
96     " <ns1:elementOne xmlns:ns1='urn:uriOne'>lets go</ns1:elementOne>" +
97     " <ns2:elementTwo xmlns:ns2='urn:uriTwo'>ram ones</ns2:elementTwo>" +
98     " </complexPart>" +
99     "</vendor:msg0>";
100   
101   private static final String JavaDoc PROCESS_NAME = "testProcess";
102   private static final long PARTNER_LINK_ID = 1903L;
103   
104   public BpelEndpointHandlerTest(String JavaDoc name) {
105     super(name);
106     System.setProperty("javax.xml.soap.MessageFactory", "org.jboss.axis.soap.MessageFactoryImpl");
107   }
108   
109   protected void setUp() throws Exception JavaDoc {
110     // process definition
111
BpelDefinition process = new BpelDefinition(PROCESS_NAME);
112     // read wsdl
113
Definition def = WsdlUtil.readText(WSDL_TEXT);
114     ImportsDefinition imports = process.getImports();
115     imports.addImport(WsdlUtil.createImport(def));
116     BpelReader.getInstance().registerPropertyAliases(imports);
117     // partner link
118
PartnerLinkType plinkType = imports.getPartnerLinkType(new QName JavaDoc(BpelConstants.NS_EXAMPLES, "plt"));
119     PartnerLinkDefinition plink = new PartnerLinkDefinition();
120     plink.setName("pl");
121     plink.setPartnerLinkType(plinkType);
122     plink.setMyRole(plinkType.getFirstRole());
123     plink.setId(PARTNER_LINK_ID);
124     process.getScope().addPartnerLink(plink);
125     // deploy process definition
126
initialContext = new InitialContext JavaDoc();
127     deployer = new JndiProcessDeployer(initialContext);
128     deployer.deployProcessDefinition(process);
129     // build messager service
130
BarApplication bpelConfig = new BarApplication();
131     bpelConfig.setConnectionFactoryName("ConnectionFactory");
132     bpelConfig.setDestinationName("queue/testQueue");
133     messagerService = MessagerService.buildMessagerService(bpelConfig, process, initialContext);
134     // endpoint handler
135
HashMap JavaDoc handlerConfig = new HashMap JavaDoc();
136     handlerConfig.put(BpelEndpointHandler.PROCESS_NAME_PARAM, process.getName());
137     handlerConfig.put(BpelEndpointHandler.PARTNER_LINK_NAME_PARAM, plink.getName());
138     HandlerInfo JavaDoc info = new HandlerInfo JavaDoc(BpelEndpointHandler.class, handlerConfig, new QName JavaDoc[0]);
139     handler = new BpelEndpointHandler();
140     handler.init(info);
141   }
142   
143   protected void tearDown() throws Exception JavaDoc {
144     // unbind endpoint infos
145
messagerService.destroy(initialContext);
146     // unbind process definition
147
deployer.undeployProcessDefinition(PROCESS_NAME);
148     initialContext.close();
149     handler.destroy();
150   }
151   
152   public void testGetDestination() throws Exception JavaDoc {
153     Queue destination = (Queue) handler.getDestination();
154     assertNotNull(destination);
155     assertEquals("testQueue", destination.getQueueName());
156   }
157   
158   public void testGetConnection() throws Exception JavaDoc {
159     Connection connection = handler.getConnection();
160     ConnectionMetaData metaData = connection.getMetaData();
161     assertEquals(1, metaData.getJMSMajorVersion());
162     assertEquals(1, metaData.getJMSMinorVersion());
163   }
164   
165   public void testSendRequest() throws Exception JavaDoc {
166     SOAPMessage JavaDoc soapMessage = MessageFactory.newInstance().createMessage(
167         null, new ByteArrayInputStream JavaDoc(REQUEST_ENV_TEXT.getBytes()));
168     SOAPMessageContext JavaDoc soapContext = new SOAPMessageContextImpl(soapMessage);
169     
170     Connection connection = handler.getConnection();
171     Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
172     handler.sendRequest(soapContext, session);
173     
174     MessageConsumer consumer = session.createConsumer(handler.getDestination());
175     connection.start();
176     ObjectMessage message = (ObjectMessage) consumer.receiveNoWait();
177     message.acknowledge();
178     session.close();
179     
180     assertEquals(PARTNER_LINK_ID, message.getLongProperty(BpelEndpointHandler.PARTNER_LINK_ID_PROP));
181     assertEquals("op", message.getStringProperty(BpelEndpointHandler.OPERATION_NAME_PROP));
182     assertEquals("venus", message.getStringProperty("nameProperty"));
183     assertEquals("30", message.getStringProperty("idProperty"));
184     
185     Element JavaDoc messageElement = (Element JavaDoc) message.getObject();
186     assertEquals(BpelConstants.NS_VENDOR, messageElement.getNamespaceURI());
187     assertEquals("msg0", messageElement.getLocalName());
188     assertNotNull(NodeUtil.getElement(messageElement, "simplePart"));
189     assertNotNull(NodeUtil.getElement(messageElement, "elementPart"));
190   }
191   
192   public void testReceiveResponse() throws Exception JavaDoc {
193     SOAPMessage JavaDoc soapMessage = MessageFactory.newInstance().createMessage(
194         null, new ByteArrayInputStream JavaDoc(REQUEST_ENV_TEXT.getBytes()));
195     SOAPMessageContext JavaDoc soapContext = new SOAPMessageContextImpl(soapMessage);
196     
197     Connection connection = handler.getConnection();
198     Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
199     TemporaryQueue replyTo = session.createTemporaryQueue();
200     MessageProducer producer = session.createProducer(replyTo);
201     Element JavaDoc messageElement = NodeUtil.parseElement(RESPONSE_ELEM_TEXT);
202     producer.send(session.createObjectMessage((Serializable JavaDoc) messageElement));
203     
204     handler.receiveResponse(soapContext, session, replyTo);
205     /* session.commit(); */
206     session.close();
207     messageElement = (Element JavaDoc) soapContext.getProperty(BpelEndpointHandler.MESSAGE_OBJECT_PROP);
208     assertEquals(BpelConstants.NS_EXAMPLES, messageElement.getNamespaceURI());
209     assertEquals("msg0", messageElement.getLocalName());
210     assertNotNull(NodeUtil.getElement(messageElement, "intPart"));
211     assertNotNull(NodeUtil.getElement(messageElement, "complexPart"));
212   }
213 }
214
Popular Tags