dblevins 2005/06/21 18:31:35
Modified: modules/core/src/java/org/openejb/server/axis
EJBContainerProvider.java
Log:
Set the pivot point and create the response message or error response message
along with the InvocationResult.
Revision Changes Path
1.7 +29 -2
openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java
Index: EJBContainerProvider.java
===================================================================
RCS file:
/scm/openejb/openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EJBContainerProvider.java 21 Jun 2005 21:16:59 -0000 1.6
+++ EJBContainerProvider.java 21 Jun 2005 22:31:35 -0000 1.7
@@ -50,6 +50,7 @@
import java.util.Vector;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.holders.IntHolder;
+import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.soap.SOAPMessage;
import org.apache.axis.AxisFault;
@@ -63,6 +64,7 @@
import org.apache.axis.message.RPCElement;
import org.apache.axis.message.RPCParam;
import org.apache.axis.message.SOAPEnvelope;
+import org.apache.axis.message.SOAPFault;
import org.apache.axis.providers.java.RPCProvider;
import org.apache.axis.utils.JavaUtils;
import org.apache.geronimo.core.service.InvocationKey;
@@ -124,7 +126,7 @@
*
* @see org.apache.axis.providers.java.RPCProvider
*/
- public class AxisRpcInvocation implements EJBInvocation {
+ private class AxisRpcInvocation implements EJBInvocation {
private int index;
// Valid in server-side interceptor stack once an instance has been
identified
@@ -221,10 +223,35 @@
}
public InvocationResult createResult(Object object) {
+ messageContext.setPastPivot(true);
+ try {
+ Message requestMessage = messageContext.getRequestMessage();
+ SOAPEnvelope requestEnvelope =
requestMessage.getSOAPEnvelope();
+ RPCElement requestBody = getBody(requestEnvelope,
messageContext);
+
+ Message responseMessage =
messageContext.getResponseMessage();
+ SOAPEnvelope responseEnvelope =
responseMessage.getSOAPEnvelope();
+ ServiceDesc serviceDescription =
messageContext.getService().getServiceDescription();
+ RPCElement responseBody = createResponseBody(requestBody,
messageContext, operation, serviceDescription, object, responseEnvelope,
getInOutParams());
+
+ responseEnvelope.addBodyElement(responseBody);
+ } catch (Exception e) {
+ throw new RuntimeException("Failed while creating response
message body", e);
+ }
+
return new SimpleInvocationResult(true, object);
}
public InvocationResult createExceptionResult(Exception exception) {
+ messageContext.setPastPivot(true);
+
+ SOAPFault fault = new SOAPFault(new AxisFault("Server", "Server
Error", null, null));
+ SOAPEnvelope envelope = new SOAPEnvelope();
+ envelope.addBodyElement(fault);
+ Message message = new Message(envelope);
+ message.setMessageType(Message.RESPONSE);
+ messageContext.setResponseMessage(message);
+
return new SimpleInvocationResult(false, exception);
}