1
2
3
4
5
6
7
8
9
10
11 package org.mule.providers.soap.xfire;
12
13 import org.mule.config.MuleProperties;
14 import org.mule.impl.MuleMessage;
15 import org.mule.providers.AbstractMessageReceiver;
16 import org.mule.providers.NullPayload;
17 import org.mule.umo.UMOException;
18 import org.mule.umo.UMOMessage;
19 import org.mule.umo.endpoint.UMOImmutableEndpoint;
20
21 import java.lang.reflect.Method;
22
23 import javax.xml.namespace.QName;
24
25 import org.codehaus.xfire.MessageContext;
26 import org.codehaus.xfire.fault.XFireFault;
27 import org.codehaus.xfire.service.invoker.Invoker;
28
29
30
31
32 public class MuleInvoker implements Invoker
33 {
34 private final AbstractMessageReceiver receiver;
35 private final boolean synchronous;
36
37 public MuleInvoker(AbstractMessageReceiver receiver, boolean synchronous)
38 {
39 this.receiver = receiver;
40 this.synchronous = synchronous;
41 }
42
43 public Object invoke(Method method, Object[] objects, MessageContext messageContext) throws XFireFault
44 {
45 UMOMessage message = null;
46 try
47 {
48 XFireMessageAdapter messageAdapter = (XFireMessageAdapter)receiver.getConnector()
49 .getMessageAdapter(objects);
50 messageAdapter.setMessageContext(messageContext);
51 messageAdapter.setProperty(MuleProperties.MULE_METHOD_PROPERTY, method);
52
53 message = receiver.routeMessage(new MuleMessage(messageAdapter), synchronous);
54 }
55 catch (UMOException e)
56 {
57 throw new XFireFault(e);
58 }
59
60 if (message != null)
61 {
62 if (message.getExceptionPayload() != null)
63 {
64 QName code = new QName(String.valueOf(message.getExceptionPayload().getCode()));
65 throw new XFireFault(message.getExceptionPayload().getMessage(),
66 message.getExceptionPayload().getException(), code);
67 }
68 else if (message.getPayload() instanceof NullPayload)
69 {
70 return null;
71 }
72 else
73 {
74 return message.getPayload();
75 }
76 }
77 else
78 {
79 return null;
80 }
81 }
82
83 public UMOImmutableEndpoint getEndpoint()
84 {
85 return receiver.getEndpoint();
86 }
87 }