Author: rfeng
Date: Thu Oct 5 17:25:05 2006
New Revision: 453436
URL: http://svn.apache.org/viewvc?view=rev&rev=453436
Log:
Adding service-side async invocation
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
Thu Oct 5 17:25:05 2006
@@ -114,6 +114,7 @@
// FIXME:
inboundContract.setInterfaceClass(serviceDefinition.getServiceContract().getInterfaceClass());
inboundContract.setDataBinding(OM_DATA_BINDING);
+
inboundContract.setCallbackName(serviceDefinition.getServiceContract().getCallbackName());
try {
wireService.checkCompatibility(inboundContract,
outboundContract, true);
@@ -121,8 +122,9 @@
throw new Axis2BindingBuilderRuntimeException(e);
}
- Service service = new Axis2Service(serviceDefinition.getName(),
inboundContract, parent, wireService, wsBinding,
+ Service service = new Axis2Service(serviceDefinition.getName(),
outboundContract, parent, wireService, wsBinding,
servletHost, configContext, workContext);
+ service.setBindingServiceContract(inboundContract);
return service;
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
Thu Oct 5 17:25:05 2006
@@ -46,7 +46,6 @@
inboundWire.getSourceCallbackInvocationChains(targetAddress);
OutboundInvocationChain chain =
sourceCallbackInvocationChains.get(operation);
TargetInvoker invoker = chain.getTargetInvoker();
- // System.out.println("Axis2CallbackInvocationHandler.invoke invoking
super: " + args[0]);
return invoke(chain, invoker, args);
}
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
Thu Oct 5 17:25:05 2006
@@ -57,7 +57,8 @@
import org.osoa.sca.annotations.Destroy;
/**
- * An implementation of a [EMAIL PROTECTED] ServiceExtension} configured with
the Axis2 binding
+ * An implementation of a [EMAIL PROTECTED] ServiceExtension} configured with
the Axis2
+ * binding
*
* @version $Rev$ $Date$
*/
@@ -74,9 +75,14 @@
private Map<MessageId, InvocationContext> invCtxMap = new
HashMap<MessageId, InvocationContext>();
- public Axis2Service(String theName, ServiceContract<?> serviceContract,
CompositeComponent parent,
- WireService wireService, WebServiceBinding binding, ServletHost
servletHost,
- ConfigurationContext configContext, WorkContext workContext) {
+ public Axis2Service(String theName,
+ ServiceContract<?> serviceContract,
+ CompositeComponent parent,
+ WireService wireService,
+ WebServiceBinding binding,
+ ServletHost servletHost,
+ ConfigurationContext configContext,
+ WorkContext workContext) {
super(theName, serviceContract.getInterfaceClass(), parent,
wireService);
@@ -116,17 +122,18 @@
private AxisService createAxisService(WebServiceBinding wsBinding) throws
AxisFault {
Definition definition = wsBinding.getWSDLDefinition();
WebServicePortMetaData wsdlPortInfo =
- new WebServicePortMetaData(definition,
wsBinding.getWSDLPort(), null, false);
+ new WebServicePortMetaData(definition, wsBinding.getWSDLPort(),
null, false);
// TODO investigate if this is 20 wsdl what todo?
WSDLToAxisServiceBuilder builder =
- new WSDL11ToAxisServiceBuilder(definition,
wsdlPortInfo.getServiceName(), wsdlPortInfo.getPort()
- .getName());
+ new WSDL11ToAxisServiceBuilder(definition,
wsdlPortInfo.getServiceName(), wsdlPortInfo.getPort()
+ .getName());
builder.setServerSide(true);
AxisService axisService = builder.populateService();
axisService.setName(this.getName());
- axisService.setServiceDescription("Tuscany configured AxisService for
service: '" + this.getName() + '\'');
+ axisService.setServiceDescription("Tuscany configured AxisService for
service: '" + this.getName()
+ + '\'');
// Use the existing WSDL
Parameter wsdlParam = new Parameter(WSDLConstants.WSDL_4_J_DEFINITION,
null);
@@ -137,14 +144,14 @@
PortType wsdlPortType = wsdlPortInfo.getPortType();
for (Object o : wsdlPortType.getOperations()) {
- Operation wsdlOperation = (Operation) o;
+ Operation wsdlOperation = (Operation)o;
String operationName = wsdlOperation.getName();
QName operationQN = new QName(definition.getTargetNamespace(),
operationName);
org.apache.tuscany.spi.model.Operation<?> op =
serviceContract.getOperations().get(operationName);
MessageReceiver msgrec = null;
- if (inboundWire.getCallbackReferenceName() != null) {
+ if (serviceContract.getCallbackName() != null) {
msgrec = new Axis2ServiceInOutAsyncMessageReceiver(this, op,
workContext);
} else {
msgrec = new Axis2ServiceInOutSyncMessageReceiver(this, op);
@@ -199,7 +206,7 @@
}
Object body = resp.getBody();
if (resp.isFault()) {
- throw new InvocationTargetException((Throwable) body);
+ throw new InvocationTargetException((Throwable)body);
}
return body;
}
@@ -222,13 +229,13 @@
return m;
}
}
- throw new BuilderConfigException("no operation named " + operationName
+ " found on service interface: "
- + serviceInterface.getName());
+ throw new BuilderConfigException("no operation named " + operationName
+ + " found on service interface: "
+ + serviceInterface.getName());
}
- public TargetInvoker createCallbackTargetInvoker(
- ServiceContract contract,
- org.apache.tuscany.spi.model.Operation operation) {
+ public TargetInvoker createCallbackTargetInvoker(ServiceContract contract,
+
org.apache.tuscany.spi.model.Operation operation) {
return new Axis2ServiceCallbackTargetInvoker(workContext, this);
}
@@ -252,8 +259,9 @@
public SOAPFactory soapFactory;
- public InvocationContext(MessageContext messageCtx,
org.apache.tuscany.spi.model.Operation<?> operation,
- SOAPFactory soapFactory) {
+ public InvocationContext(MessageContext messageCtx,
+ org.apache.tuscany.spi.model.Operation<?>
operation,
+ SOAPFactory soapFactory) {
this.inMessageContext = messageCtx;
this.operation = operation;
this.soapFactory = soapFactory;
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutAsyncMessageReceiver.java
Thu Oct 5 17:25:05 2006
@@ -21,16 +21,18 @@
import java.lang.reflect.InvocationTargetException;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.receivers.AbstractMessageReceiver;
+import org.apache.axis2.receivers.AbstractInOutAsyncMessageReceiver;
import org.apache.tuscany.binding.axis2.Axis2Service.InvocationContext;
import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.wire.InvocationRuntimeException;
import org.apache.tuscany.spi.wire.MessageId;
-public class Axis2ServiceInOutAsyncMessageReceiver extends
AbstractMessageReceiver {
+public class Axis2ServiceInOutAsyncMessageReceiver extends
AbstractInOutAsyncMessageReceiver {
private Operation<?> operation;
@@ -38,47 +40,47 @@
private Axis2Service service;
- public Axis2ServiceInOutAsyncMessageReceiver(Axis2Service service,
Operation operation,
-
- WorkContext workContext) {
+ public Axis2ServiceInOutAsyncMessageReceiver(Axis2Service service,
+ Operation operation,
+ WorkContext workContext) {
this.operation = operation;
this.workContext = workContext;
this.service = service;
}
- public final void receive(final MessageContext messageCtx) {
-
- Runnable theadedTask = new Runnable() {
- public void run() {
- try {
- // Create a new message id and hand it to
JDKInboundInvocationHandler
- // via work context
- MessageId messageId = new MessageId();
- workContext.setCurrentMessageId(messageId);
- // Now use message id as index to context to be used by
callback target invoker
- InvocationContext invCtx =
- service.new InvocationContext(messageCtx,
operation, getSOAPFactory(messageCtx));
- service.addMapping(messageId, invCtx);
-
- invokeBusinessLogic(messageCtx);
- } catch (AxisFault e) {
- // log.error(e);
- }
- }
- };
-
messageCtx.getConfigurationContext().getThreadPool().execute(theadedTask);
+ public Axis2ServiceInOutAsyncMessageReceiver() {
}
- public void invokeBusinessLogic(MessageContext inMC) throws AxisFault {
-
+ @Override
+ public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC)
throws AxisFault {
try {
+ // Create a new message id and hand it to
+ // JDKInboundInvocationHandler
+ // via work context
+ MessageId messageId = new MessageId();
+ workContext.setCurrentMessageId(messageId);
+ // Now use message id as index to context to be used by callback
+ // target invoker
+ InvocationContext invCtx = service.new InvocationContext(inMC,
operation, getSOAPFactory(inMC));
+ service.addMapping(messageId, invCtx);
+
OMElement requestOM =
inMC.getEnvelope().getBody().getFirstElement();
- Object[] args = new Object[] { requestOM };
- service.invokeTarget(operation, args);
+ Object[] args = new Object[] {requestOM};
+
+ // FIXME: It seems that the AsyncTargetInvoker always returns null
+ OMElement responseOM = (OMElement)service.invokeTarget(operation,
args);
+
+ SOAPEnvelope soapEnvelope =
getSOAPFactory(inMC).getDefaultEnvelope();
+ if (responseOM != null) {
+ soapEnvelope.getBody().addChild(responseOM);
+ }
+ outMC.setEnvelope(soapEnvelope);
+
outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
Constants.VALUE_TRUE);
+
} catch (InvocationTargetException e) {
Throwable t = e.getCause();
if (t instanceof Exception) {
- throw AxisFault.makeFault((Exception) t);
+ throw AxisFault.makeFault((Exception)t);
}
throw new InvocationRuntimeException(e);
} catch (Exception e) {
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceInOutSyncMessageReceiver.java
Thu Oct 5 17:25:05 2006
@@ -40,13 +40,17 @@
this.operation = operation;
}
+ public Axis2ServiceInOutSyncMessageReceiver() {
+
+ }
+
@Override
public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC)
throws AxisFault {
try {
OMElement requestOM =
inMC.getEnvelope().getBody().getFirstElement();
- Object[] args = new Object[] { requestOM };
+ Object[] args = new Object[] {requestOM};
- OMElement responseOM = (OMElement)
axis2Service.invokeTarget(operation, args);
+ OMElement responseOM =
(OMElement)axis2Service.invokeTarget(operation, args);
SOAPEnvelope soapEnvelope =
getSOAPFactory(inMC).getDefaultEnvelope();
soapEnvelope.getBody().addChild(responseOM);
@@ -54,12 +58,14 @@
outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
Constants.VALUE_TRUE);
} catch (InvocationTargetException e) {
+ e.printStackTrace();
Throwable t = e.getCause();
if (t instanceof Exception) {
- throw AxisFault.makeFault((Exception) t);
+ throw AxisFault.makeFault((Exception)t);
}
throw new InvocationRuntimeException(e);
} catch (Exception e) {
+ e.printStackTrace();
throw AxisFault.makeFault(e);
}
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceServlet.java
Thu Oct 5 17:25:05 2006
@@ -104,6 +104,10 @@
}
public URL getResource(String path) throws
MalformedURLException {
+ if("/".equals(path)) {
+ // HACK: To avoid NPE
+ return new URL("/axis2");
+ }
return null;
}
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/resources/org/apache/tuscany/binding/axis2/engine/config/axis2.xml
Thu Oct 5 17:25:05 2006
@@ -61,6 +61,10 @@
class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+
class="org.apache.tuscany.binding.axis2.Axis2ServiceInOutAsyncMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+
class="org.apache.tuscany.binding.axis2.Axis2ServiceInOutSyncMessageReceiver"/>
</messageReceivers>
<!-- ================================================= -->
<!-- Transport Ins -->
Modified:
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java?view=diff&rev=453436&r1=453435&r2=453436
==============================================================================
---
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
(original)
+++
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
Thu Oct 5 17:25:05 2006
@@ -103,7 +103,7 @@
contract.setOperations(opMap);
EasyMock.expect(inboundWire.getServiceContract()).andReturn(contract).anyTimes();
if (callback) {
-
EasyMock.expect(inboundWire.getCallbackReferenceName()).andReturn("").anyTimes();
+ contract.setCallbackName("");
}
EasyMock.replay(inboundWire);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]