KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > jbi > transport > JBIClientTransport


1 package org.objectweb.celtix.jbi.transport;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.ByteArrayOutputStream JavaDoc;
5 import java.io.IOException JavaDoc;
6 import java.io.InputStream JavaDoc;
7 import java.lang.reflect.Method JavaDoc;
8 import java.util.concurrent.Executor JavaDoc;
9 import java.util.concurrent.Future JavaDoc;
10 import java.util.logging.Logger JavaDoc;
11
12 import javax.jbi.messaging.DeliveryChannel;
13 import javax.jbi.messaging.InOut;
14 import javax.jbi.messaging.MessageExchangeFactory;
15 import javax.jbi.messaging.NormalizedMessage;
16 import javax.jws.WebService;
17 import javax.wsdl.Port;
18 import javax.xml.namespace.QName JavaDoc;
19 import javax.xml.transform.Source JavaDoc;
20 import javax.xml.transform.stream.StreamSource JavaDoc;
21 import javax.xml.ws.handler.MessageContext;
22
23 import org.objectweb.celtix.bindings.ClientBinding;
24 import org.objectweb.celtix.bindings.ResponseCallback;
25 import org.objectweb.celtix.context.InputStreamMessageContext;
26 import org.objectweb.celtix.context.ObjectMessageContext;
27 import org.objectweb.celtix.context.OutputStreamMessageContext;
28 import org.objectweb.celtix.transports.ClientTransport;
29 import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
30 import org.objectweb.celtix.wsdl.EndpointReferenceUtils;
31
32
33
34 /**
35  * Connects Celtix clients to the NormalizedMessageRouter. Celtix
36  * messages are wrapped in a NormalizedMessage before being sent to
37  * the NMR and are unwrapped when being received from it.
38  */

39 public class JBIClientTransport implements ClientTransport {
40     
41     private static final Logger JavaDoc LOG = Logger.getLogger(JBIClientTransport.class.getName());
42     private final DeliveryChannel channel;
43     private final EndpointReferenceType endpointRef;
44     private final QName JavaDoc serviceName;
45     private final ResponseCallback responseCallback;
46     
47     public JBIClientTransport(DeliveryChannel dc,
48                               EndpointReferenceType epr,
49                               ClientBinding binding) {
50         channel = dc;
51         endpointRef = epr;
52         serviceName = EndpointReferenceUtils.getServiceName(endpointRef);
53         responseCallback = binding.createResponseCallback();
54     }
55     
56     public void invokeOneway(OutputStreamMessageContext context) throws IOException JavaDoc {
57         throw new RuntimeException JavaDoc("not yet implemented");
58     }
59     
60     public InputStreamMessageContext invoke(OutputStreamMessageContext context)
61         throws IOException JavaDoc {
62         
63         try {
64             Method JavaDoc targetMethod = (Method JavaDoc)context.get(ObjectMessageContext.METHOD_OBJ);
65             Class JavaDoc<?> clz = targetMethod.getDeclaringClass();
66             
67             LOG.fine("invoking service " + clz);
68             
69             WebService ws = clz.getAnnotation(WebService.class);
70             assert ws != null;
71             QName JavaDoc interfaceName = new QName JavaDoc(ws.targetNamespace(), ws.name());
72             
73             MessageExchangeFactory factory = channel.createExchangeFactoryForService(serviceName);
74             LOG.fine("create message exchange svc: " + serviceName);
75             InOut xchng = factory.createInOutExchange();
76             
77             NormalizedMessage inMsg = xchng.createMessage();
78             LOG.fine("exchange endpoint: " + xchng.getEndpoint());
79             
80             InputStream JavaDoc ins = null;
81             
82             if (inMsg != null) {
83                 LOG.fine("setup message contents on " + inMsg);
84                 inMsg.setContent(getMessageContent(context));
85                 xchng.setService(serviceName);
86                 LOG.fine("service for exchange " + serviceName);
87                 
88                 xchng.setInterfaceName(interfaceName);
89                 
90                 xchng.setOperation(new QName JavaDoc(targetMethod.getName()));
91                 xchng.setInMessage(inMsg);
92                 LOG.fine("sending message");
93                 channel.sendSync(xchng);
94                 
95                 NormalizedMessage outMsg = xchng.getOutMessage();
96                 ins = JBIMessageHelper.convertMessageToInputStream(outMsg.getContent());
97                 
98             } else {
99                 System.out.println("no message yet");
100             }
101             
102             if (ins == null) {
103                 throw new IOException JavaDoc("unable to retrieve message");
104             }
105             return new JBIInputStreamMessageContext(context, ins);
106             
107         } catch (Exception JavaDoc ex) {
108             ex.printStackTrace();
109             throw new IOException JavaDoc(ex.toString());
110         }
111     }
112     
113     Source JavaDoc getMessageContent(OutputStreamMessageContext context) {
114         assert context instanceof JBIOutputStreamMessageContext
115             : "context must be of type JBIOutputStreamMessageContext";
116     
117         JBIOutputStreamMessageContext ctx = (JBIOutputStreamMessageContext)context;
118         ByteArrayOutputStream JavaDoc bos = (ByteArrayOutputStream JavaDoc)ctx.getOutputStream();
119         return new StreamSource JavaDoc(new ByteArrayInputStream JavaDoc(bos.toByteArray()));
120     }
121     
122     
123     public Future JavaDoc<InputStreamMessageContext> invokeAsync(OutputStreamMessageContext context,
124                                                          Executor JavaDoc executor)
125         throws IOException JavaDoc {
126         throw new RuntimeException JavaDoc("not yet implemented");
127     }
128     
129     public void finalPrepareOutputStreamContext(OutputStreamMessageContext context)
130         throws IOException JavaDoc {
131     }
132     
133     public ResponseCallback getResponseCallback() {
134         return responseCallback;
135     }
136     
137     public void shutdown() {
138     }
139     
140     
141     public OutputStreamMessageContext createOutputStreamContext(MessageContext context)
142         throws IOException JavaDoc {
143         return new JBIOutputStreamMessageContext(context);
144     }
145     
146     public EndpointReferenceType getTargetEndpoint() {
147         // TODO Auto-generated method stub
148
return null;
149     }
150     
151     public EndpointReferenceType getDecoupledEndpoint() throws IOException JavaDoc {
152         // TODO Auto-generated method stub
153
return null;
154     }
155     
156     public Port getPort() {
157         // TODO Auto-generated method stub
158
return null;
159     }
160 }
161
Popular Tags