summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java69
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java32
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java30
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java188
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java37
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java35
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java82
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java39
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java37
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/jndi.properties39
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite47
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-client.xml29
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-server.xml29
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard.wsdl125
-rw-r--r--sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java89
15 files changed, 907 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java
new file mode 100644
index 0000000000..31a9bc3f9c
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package test.client;
+
+/**
+ * A client interface to invoke the CreditCardPayment using different interaction patterns
+ */
+public interface CreditCardClient {
+ /**
+ * Invoke the service synchronously
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorize(String creditCardNumber, String holder, float amount);
+
+ /**
+ * Invoke the service asynchronously and poll for the result
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorizeAsync(String creditCardNumber, String holder, float amount);
+
+ /**
+ * Invoke the service asynchronously and get the result from a callback
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorizeAsyncWithCallback(String creditCardNumber, String holder, float amount);
+
+ /**
+ * Invoke the service using oneway (fire-and-forget) and the target component will make a callback upon the request has been processed
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorizeSCAAsyncWithCallback(String creditCardNumber, String holder, float amount);
+
+ /**
+ * Invoke the service using request/response and the target component will make a callback upon the request has been processed
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorizeSCAWithCallback(String creditCardNumber, String holder, float amount);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java
new file mode 100644
index 0000000000..648f30d804
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package test.client;
+
+import org.oasisopen.sca.annotation.OneWay;
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The oneway callback interface
+ */
+@Remotable
+public interface CreditCardPaymentCallback {
+ // Makes a callback
+ @OneWay
+ void authorizeResponseOneway(String creditCardNumber, String status);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java
new file mode 100644
index 0000000000..801effa734
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package test.client;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The synchronous callback interface
+ */
+@Remotable
+public interface CreditCardPaymentCallbackSync {
+ // Makes a callback
+ String authorizeResponse(String creditCardNumber, String status);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java
new file mode 100644
index 0000000000..69a6203045
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package test.client;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Future;
+
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Response;
+
+import org.oasisopen.sca.annotation.Reference;
+import org.oasisopen.sca.annotation.Service;
+
+import com.example.test.jaxb.client.AuthorizeResponse;
+import com.example.test.jaxb.client.CreditCardDetailsType;
+import com.example.test.jaxb.client.ObjectFactory;
+import com.example.test.jaxb.client.PayerType;
+import com.example.test.jaxws.client.AuthorizeFault;
+import com.example.test.jaxws.client.CreditCardPayment;
+
+/**
+ * Mocked implementation of CreditCardPaymentClient
+ */
+@Service(CreditCardClient.class)
+public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCardPaymentCallback,
+ CreditCardPaymentCallbackSync {
+
+ @Reference
+ private CreditCardPayment proxy;
+
+ @Reference
+ private CreditCardPaymentRequestClient asyncProxy;
+
+ @Reference
+ private CreditCardPaymentRequestClientSync syncProxy;
+
+ @Override
+ public String authorize(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+
+ try {
+ return proxy.authorize(creditCard, amount);
+ } catch (AuthorizeFault e) {
+ return "FAIL: " + e.getFaultInfo().getErrorCode();
+ }
+
+ }
+
+ private CreditCardDetailsType createCreditCard(String creditCardNumber, String holder) {
+ ObjectFactory factory = new ObjectFactory();
+ CreditCardDetailsType creditCard = factory.createCreditCardDetailsType();
+ creditCard.setCreditCardNumber(creditCardNumber);
+ PayerType payer = factory.createPayerType();
+ payer.setName(holder);
+ creditCard.setCardOwner(payer);
+ return creditCard;
+ }
+
+ public String authorizeAsync(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+
+ Response<AuthorizeResponse> respone = proxy.authorizeAsync(creditCard, amount);
+ try {
+ return respone.get().getStatus();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+
+ }
+
+ public String authorizeAsyncWithCallback(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+
+ Future<?> respone = proxy.authorizeAsync(creditCard, amount, new AsyncHandler<AuthorizeResponse>() {
+
+ @Override
+ public void handleResponse(Response<AuthorizeResponse> res) {
+ try {
+ System.out.println(Thread.currentThread() + " Response has arrived: " + res.get().getStatus());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ while (!(respone.isDone() || respone.isCancelled())) {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+ }
+
+ System.out.println(Thread.currentThread() + " The task is done");
+ try {
+ return ((AuthorizeResponse)respone.get()).getStatus();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+ }
+
+ /**
+ * A map that host the result for a given credit card
+ */
+ private static Map<String, String> statusMap = new HashMap<String, String>();
+
+ public String authorizeSCAAsyncWithCallback(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+ asyncProxy.authorizeRequestOneway(creditCard, amount);
+ synchronized (statusMap) {
+ while (true) {
+ String status = statusMap.remove("ASYNC:" + creditCardNumber);
+ if (status != null) {
+ System.out.println("Response found for " + creditCardNumber + " :" + status);
+ return status;
+ } else {
+ try {
+ statusMap.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void authorizeResponseOneway(String creditCardNumber, String status) {
+ System.out.println("SCA one callback: CreditCard: " + creditCardNumber + " Status: " + status);
+ synchronized (statusMap) {
+ statusMap.put("ASYNC:" + creditCardNumber, status);
+ statusMap.notifyAll();
+ }
+ }
+
+ public String authorizeSCAWithCallback(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+ syncProxy.authorizeRequest(creditCard, amount);
+ synchronized (statusMap) {
+ while (true) {
+ String status = statusMap.remove("SYNC:" + creditCardNumber);
+ if (status != null) {
+ System.out.println("Response found for " + creditCardNumber + " :" + status);
+ return status;
+ } else {
+ try {
+ statusMap.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public String authorizeResponse(String creditCardNumber, String status) {
+ System.out.println("SCA synchronous callback: CreditCard: " + creditCardNumber + " Status: " + status);
+ synchronized (statusMap) {
+ statusMap.put("SYNC:" + creditCardNumber, status);
+ statusMap.notifyAll();
+ }
+ return "ACK";
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java
new file mode 100644
index 0000000000..fe0e99cd50
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.client;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.OneWay;
+import org.oasisopen.sca.annotation.Remotable;
+
+import com.example.test.jaxb.client.CreditCardDetailsType;
+
+/**
+ * The bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
+ */
+@Remotable
+@Callback(CreditCardPaymentCallback.class)
+public interface CreditCardPaymentRequestClient {
+ // Send out the request
+ @OneWay
+ void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java
new file mode 100644
index 0000000000..52f5014af0
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.client;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Remotable;
+
+import com.example.test.jaxb.client.CreditCardDetailsType;
+
+/**
+ * The synchronous bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
+ */
+@Remotable
+@Callback(CreditCardPaymentCallbackSync.class)
+public interface CreditCardPaymentRequestClientSync {
+ // Send out the request
+ String authorizeRequest(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java
new file mode 100644
index 0000000000..8d946b5723
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.server;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Service;
+
+import test.client.CreditCardPaymentCallback;
+import test.client.CreditCardPaymentCallbackSync;
+
+import com.example.test.jaxb.server.CreditCardDetailsType;
+import com.example.test.jaxws.server.AuthorizeFault;
+import com.example.test.jaxws.server.CreditCardPayment;
+
+/**
+ * Mocked implementation of CreditCardPayment
+ */
+@Service({CreditCardPayment.class, CreditCardPaymentRequestServer.class, CreditCardPaymentRequestServerSync.class})
+public class CreditCardPaymentImpl implements CreditCardPayment, CreditCardPaymentRequestServer,
+ CreditCardPaymentRequestServerSync {
+ @Callback
+ protected CreditCardPaymentCallback callback;
+
+ @Callback
+ protected CreditCardPaymentCallbackSync callbackSync;
+
+ @Override
+ public void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount) {
+ String status;
+ try {
+ status = authorize(creditCard, amount);
+ } catch (AuthorizeFault e) {
+ status = "FAIL: " + e.getFaultInfo().getErrorCode();
+ }
+ callback.authorizeResponseOneway(creditCard.getCreditCardNumber(), status);
+ }
+
+ @Override
+ public String authorizeRequest(CreditCardDetailsType creditCard, float amount) {
+ String status;
+ try {
+ status = authorize(creditCard, amount);
+ } catch (AuthorizeFault e) {
+ status = "FAIL: " + e.getFaultInfo().getErrorCode();
+ }
+ callbackSync.authorizeResponse(creditCard.getCreditCardNumber(), status);
+ return "ACK";
+ }
+
+ @Override
+ public String authorize(CreditCardDetailsType creditCard, float amount) throws AuthorizeFault {
+ if (creditCard != null) {
+ System.out.println("Checking card: name = " + creditCard.getCardOwner().getName()
+ + " number = "
+ + creditCard.getCreditCardNumber()
+ + " for amount "
+ + amount);
+ } else {
+ System.out.println("Checking card is null");
+ }
+
+ return "OK";
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java
new file mode 100644
index 0000000000..f257e5a0ee
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.server;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.OneWay;
+import org.oasisopen.sca.annotation.Remotable;
+
+import test.client.CreditCardPaymentCallback;
+
+import com.example.test.jaxb.server.CreditCardDetailsType;
+
+/**
+ * The bi-direction interface for the server side
+ */
+@Remotable
+@Callback(CreditCardPaymentCallback.class)
+public interface CreditCardPaymentRequestServer {
+ // Send out the request
+ @OneWay
+ void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java
new file mode 100644
index 0000000000..93351c0f89
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.server;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Remotable;
+
+import test.client.CreditCardPaymentCallbackSync;
+
+import com.example.test.jaxb.server.CreditCardDetailsType;
+
+/**
+ * The synchronous bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
+ */
+@Remotable
+@Callback(CreditCardPaymentCallbackSync.class)
+public interface CreditCardPaymentRequestServerSync {
+ // Send out the request
+ String authorizeRequest(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/jndi.properties b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/jndi.properties
new file mode 100644
index 0000000000..324132604b
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/jndi.properties
@@ -0,0 +1,39 @@
+ # Licensed to the Apache Software Foundation (ASF) under one
+ # or more contributor license agreements. See the NOTICE file
+ # distributed with this work for additional information
+ # regarding copyright ownership. The ASF licenses this file
+ # to you under the Apache License, Version 2.0 (the
+ # "License"); you may not use this file except in compliance
+ # with the License. You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing,
+ # software distributed under the License is distributed on an
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ # KIND, either express or implied. See the License for the
+ # specific language governing permissions and limitations
+ # under the License.
+java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
+
+# use the following property to configure the default connector
+java.naming.provider.url = vm://localhost?broker.persistent=false
+
+# use the following property to specify the JNDI name the connection factory
+# should appear as.
+#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry
+connectionFactoryNames = ConnectionFactory
+
+# register some queues in JNDI using the form
+# queue.[jndiName] = [physicalName]
+queue.RequestQueue = RequestQueue
+queue.ResponseQueue = ResponseQueue
+
+queue.CreditCardPayment = CreditCardPaymentQueue
+queue.CreditCardPaymentRequestServer = CreditCardPaymentRequestServerQueue
+
+# register some topics in JNDI using the form
+# topic.[jndiName] = [physicalName]
+#topic.MyTopic = example.MyTopic
+
+# END SNIPPET: jndi
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite
new file mode 100644
index 0000000000..92a802fff3
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" targetNamespace="http://www.example.com"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" name="CreditCardComposite">
+
+ <component name="CreditCardPaymentComponent">
+ <implementation.java class="test.server.CreditCardPaymentImpl" />
+ <service name="CreditCardPayment">
+ <binding.jms>
+ <tuscany:wireFormat.jmsTextXML />
+ <destination jndiName="CreditCardPayment" />
+ </binding.jms>
+ </service>
+
+ <service name="CreditCardPaymentRequestServer">
+ <binding.jms>
+ <tuscany:wireFormat.jmsTextXML />
+ <destination jndiName="CreditCardPaymentRequestServer" />
+ </binding.jms>
+ </service>
+ </component>
+
+ <component name="CreditCardClientComponent">
+ <implementation.java class="test.client.CreditCardPaymentClientImpl" />
+ <reference name="proxy" target="CreditCardPaymentComponent/CreditCardPayment" />
+ <reference name="asyncProxy" target="CreditCardPaymentComponent/CreditCardPaymentRequestServer" />
+ <reference name="syncProxy" target="CreditCardPaymentComponent/CreditCardPaymentRequestServerSync" />
+ </component>
+
+</composite>
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-client.xml b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-client.xml
new file mode 100644
index 0000000000..edf8f375bc
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-client.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<bindings
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ wsdlLocation="creditcard.wsdl"
+ xmlns="http://java.sun.com/xml/ns/jaxws">
+ <bindings node="wsdl:definitions">
+ <package name="com.example.test.jaxws.client"/>
+ <enableAsyncMapping>true</enableAsyncMapping>
+ </bindings>
+</bindings> \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-server.xml b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-server.xml
new file mode 100644
index 0000000000..9f39e164b2
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard-server.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<bindings
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ wsdlLocation="creditcard.wsdl"
+ xmlns="http://java.sun.com/xml/ns/jaxws">
+ <bindings node="wsdl:definitions">
+ <package name="com.example.test.jaxws.server"/>
+ <enableAsyncMapping>false</enableAsyncMapping>
+ </bindings>
+</bindings> \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard.wsdl b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard.wsdl
new file mode 100644
index 0000000000..93988329cb
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/main/resources/wsdl/creditcard.wsdl
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<wsdl:definitions name="CreditCardPayment" targetNamespace="http://www.example.com/CreditCardPayment/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.example.com/CreditCardPayment/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+ <wsdl:types>
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/CreditCardPayment/"
+ xmlns:tns="http://www.example.com/CreditCardPayment/">
+
+ <!-- https://jaxb.dev.java.net/issues/show_bug.cgi?id=518 -->
+ <!-- I have to change the complex types to be annoymous -->
+ <xsd:element name="authorize">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="CreditCard" type="tns:CreditCardDetailsType"></xsd:element>
+ <xsd:element name="Amount" type="xsd:float"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="authorizeResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Status" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="CreditCardDetailsType">
+ <xsd:sequence>
+ <xsd:element name="CreditCardType" type="tns:CreditCardTypeType" minOccurs="0" />
+ <xsd:element name="CreditCardNumber" type="xsd:string" minOccurs="0" />
+ <xsd:element name="ExpMonth" type="xsd:int" minOccurs="0" />
+ <xsd:element name="ExpYear" type="xsd:int" minOccurs="0" />
+ <xsd:element name="CardOwner" type="tns:PayerType" minOccurs="0" />
+ <xsd:element name="CVV2" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:simpleType name="CreditCardTypeType">
+ <xsd:restriction base="xsd:token">
+ <xsd:enumeration value="Visa" />
+ <xsd:enumeration value="MasterCard" />
+ <xsd:enumeration value="Discover" />
+ <xsd:enumeration value="Amex" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:complexType name="PayerType">
+ <xsd:sequence>
+ <xsd:element name="Name" type="xsd:string" />
+ <xsd:element name="Address" type="tns:AddressType" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="AddressType">
+ <xsd:sequence>
+ <xsd:element name="Street" type="xsd:string" />
+ <xsd:element name="City" type="xsd:string" />
+ <xsd:element name="State" type="xsd:string" />
+ <xsd:element name="ZipCode" type="xsd:string" />
+ <xsd:element name="HomePhone" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="authorizeFault">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="errorCode" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="AuthorizeRequest">
+ <wsdl:part name="parameters" element="tns:authorize"></wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="AuthorizeResponse">
+ <wsdl:part name="parameters" element="tns:authorizeResponse"></wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="AuthorizeFault">
+ <wsdl:part name="parameters" element="tns:authorizeFault"></wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="CreditCardPayment">
+ <wsdl:operation name="authorize">
+ <wsdl:input message="tns:AuthorizeRequest"></wsdl:input>
+ <wsdl:output message="tns:AuthorizeResponse"></wsdl:output>
+ <wsdl:fault name="authorizationFailure" message="tns:AuthorizeFault"></wsdl:fault>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="CreditCardPaymentBinding" type="tns:CreditCardPayment">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="authorize">
+ <soap:operation soapAction="http://www.example.com/CreditCardPayment/authorize" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ <wsdl:fault name="authorizationFailure">
+ <soap:fault name="authorizationFailure" use="literal" />
+ </wsdl:fault>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="CreditCardPaymentService">
+ <wsdl:port name="CreditCardPaymentPort" binding="tns:CreditCardPaymentBinding">
+ <soap:address location="http://localhost:8080/CreditCardPayment" />
+ </wsdl:port>
+ </wsdl:service>
+
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java
new file mode 100644
index 0000000000..d9b82175cc
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta2/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package itest;
+
+import java.util.concurrent.ExecutionException;
+
+import org.apache.tuscany.sca.node.Contribution;
+import org.apache.tuscany.sca.node.ContributionLocationHelper;
+import org.apache.tuscany.sca.node.Node;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import test.client.CreditCardClient;
+
+/**
+ * A test case for two SCA components exchange data via binding.jms
+ */
+public class CreditCardTestCase {
+
+ private static Node node;
+ private static CreditCardClient client;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ String contribution = ContributionLocationHelper.getContributionLocation(CreditCardClient.class);
+ node =
+ NodeFactory.newInstance().createNode("test/client/creditcard-client.composite",
+ new Contribution("cc", contribution));
+ node.start();
+
+ client = node.getService(CreditCardClient.class, "CreditCardClientComponent/CreditCardClient");
+ }
+
+ @AfterClass
+ public static void destroy() throws Exception {
+ if (node != null) {
+ node.stop();
+ }
+ }
+
+ @Test
+ public void testCreditCard() {
+ String status = client.authorize("123", "John", 100.0f);
+ Assert.assertEquals("OK", status);
+ }
+
+ @Test
+ public void testCreditCardAsync() throws InterruptedException, ExecutionException {
+ String result = client.authorizeAsync("456", "Mary", 120.0f);
+ Assert.assertEquals("OK", result);
+ }
+
+ @Test
+ public void testCreditCardAsyncWithCallback() throws InterruptedException, ExecutionException {
+ String result = client.authorizeAsyncWithCallback("789", "Smith", 180.0f);
+ Assert.assertEquals("OK", result);
+ }
+
+ @Test
+ public void testCreditCardSCAAsyncWithCallback() throws InterruptedException, ExecutionException {
+ String result = client.authorizeSCAAsyncWithCallback("888", "Jane", 110.0f);
+ Assert.assertEquals("OK", result);
+ }
+
+ @Test
+ public void testCreditCardSCAWithCallback() throws InterruptedException, ExecutionException {
+ String result = client.authorizeSCAWithCallback("999", "Steve", 210.0f);
+ Assert.assertEquals("OK", result);
+ }
+}