summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/trunk/tutorials/travelsample
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-03-21 17:05:00 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-03-21 17:05:00 +0000
commit90a0e4f18c536fc918dc0a863371209c69e86d1b (patch)
treea7e720a1c3242a8bc8b24759791a99e4e9bafa51 /sca-java-1.x/trunk/tutorials/travelsample
parent238ecf66b372844363a8dfc78ea08f3799775214 (diff)
Add some callback samples based on the payment and credit card payment components
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@925828 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-1.x/trunk/tutorials/travelsample')
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/build.xml30
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/pom.xml136
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/Customer.java70
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java57
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java39
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java114
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/EmailGateway.java30
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/impl/EmailGatewayImpl.java37
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AddressType.java191
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/Authorize.java101
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault.java81
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault_Exception.java71
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeResponse.java81
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CardCompany.java31
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardConfirm.java27
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardDetailsType.java219
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPayment.java31
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPaymentConfirm.java31
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardSecurity.java27
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardTypeType.java74
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/PayerType.java107
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CardCompanyImpl.java60
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentCallbackImpl.java78
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentConfirmImpl.java48
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/CreditCardSecurityImpl.java38
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackIDImpl.java90
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackImpl.java78
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackRedirectImpl.java83
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentConfirmImpl.java77
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/CreditCardPayment.wsdl132
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/META-INF/sca-contribution.xml24
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/Payment.wsdl83
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/definitions.xml34
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/payment.composite118
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/test/java/scatours/payment/PaymentTestCase.java103
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/contributions/pom.xml1
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/build.xml35
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/pom.xml122
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberResponseType.java62
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberType.java82
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/ObjectFactory.java71
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/Payment.java43
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/PaymentService.java71
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/package-info.java2
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/scatours/payment/PaymentLauncher.java73
-rw-r--r--sca-java-1.x/trunk/tutorials/travelsample/launchers/pom.xml1
46 files changed, 3194 insertions, 0 deletions
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/build.xml b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/build.xml
new file mode 100644
index 0000000000..c20d49800e
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/build.xml
@@ -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.
+-->
+
+<project name="scatours-contribution-payment-java-callback" default="compile">
+ <import file="../../antdefs.xml"/>
+
+ <target name="wsdljava">
+ <antcall target="wsimport">
+ <param name="wsdlfile" value="Payment.wsdl"/>
+ <param name="javaclass" value="com/tuscanyscatours/payment/Payment.class"/>
+ <param name="package" value="com.tuscanyscatours.payment"/>
+ </antcall>
+ </target>
+</project>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/pom.xml b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/pom.xml
new file mode 100644
index 0000000000..2dc84e2b39
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/pom.xml
@@ -0,0 +1,136 @@
+<?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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>scatours</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <version>1.0-SNAPSHOT</version>
+ <artifactId>scatours-contribution-payment-java-callback</artifactId>
+ <name>Apache Tuscany SCA Tours Payment Java Callback</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>${tuscany.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-impl</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jetty</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>java.net2</id>
+ <name>java.net Maven 2.x Repository</name>
+ <url>http://download.java.net/maven/2</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>target/jaxws-source</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jaxws-maven-plugin</artifactId>
+ <version>1.12</version>
+ <executions>
+ <execution>
+ <id>payment</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>wsimport</goal>
+ </goals>
+ <configuration>
+ <packageName>com.tuscanyscatours.payment</packageName>
+ <wsdlDirectory>${basedir}/src/main/resources</wsdlDirectory>
+ <wsdlFiles>
+ <wsdlFile>Payment.wsdl</wsdlFile>
+ </wsdlFiles>
+ <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
+ <staleFile>${project.build.directory}/jaxws-source/stale/payment.stale</staleFile>
+ <verbose>false</verbose>
+ <xnocompile>true</xnocompile>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/Customer.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/Customer.java
new file mode 100644
index 0000000000..3b72f81b33
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/Customer.java
@@ -0,0 +1,70 @@
+/*
+ * 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 com.tuscanyscatours.customer;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+
+/**
+ * Customer data
+ */
+public class Customer {
+ private String id;
+ private String email;
+ private String name;
+
+ private CreditCardDetailsType creditCard;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public CreditCardDetailsType getCreditCard() {
+ return creditCard;
+ }
+
+ public void setCreditCard(CreditCardDetailsType creditCard) {
+ this.creditCard = creditCard;
+ }
+
+ public String toString() {
+ return "id: " + id + " name: " + name + " e-mail: " + email;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java
new file mode 100644
index 0000000000..b08f76e0fa
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java
@@ -0,0 +1,57 @@
+/*
+ * 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 com.tuscanyscatours.customer;
+
+public class CustomerNotFoundException extends Exception {
+ private static final long serialVersionUID = -129752837478357452L;
+
+ /**
+ *
+ */
+ public CustomerNotFoundException() {
+
+ }
+
+ /**
+ * @param message
+ */
+ public CustomerNotFoundException(String message) {
+ super(message);
+
+ }
+
+ /**
+ * @param cause
+ */
+ public CustomerNotFoundException(Throwable cause) {
+ super(cause);
+
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public CustomerNotFoundException(String message, Throwable cause) {
+ super(message, cause);
+
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java
new file mode 100644
index 0000000000..706167d567
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.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 com.tuscanyscatours.customer;
+
+import java.util.Collection;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+
+/**
+ * Customer registry interface
+ */
+public interface CustomerRegistry {
+ Customer createCustomer(String name, String email, CreditCardDetailsType creditCard);
+
+ boolean updateCustomer(Customer customer);
+
+ Customer getCustomer(String id) throws CustomerNotFoundException;
+
+ Collection<Customer> getAllCustomers();
+
+ boolean deleteCustomer(String id);
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java
new file mode 100644
index 0000000000..bdf99dec72
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java
@@ -0,0 +1,114 @@
+/*
+ * 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 com.tuscanyscatours.customer.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.EagerInit;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Requires;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+import com.tuscanyscatours.payment.creditcard.CreditCardTypeType;
+import com.tuscanyscatours.payment.creditcard.PayerType;
+
+/**
+ * An in-memory customer registry implementation
+ */
+@Service(CustomerRegistry.class)
+@Scope("COMPOSITE")
+@EagerInit
+@Requires("{http://www.osoa.org/xmlns/sca/1.0}managedTransaction.global")
+public class CustomerRegistryImpl implements CustomerRegistry {
+ private volatile static int idGenerator = 0;
+ private Map<String, Customer> customers = new HashMap<String, Customer>();
+
+ @Init
+ public void init() {
+ // Load the customers
+
+ CreditCardDetailsType cc = new CreditCardDetailsType();
+ PayerType john = new PayerType();
+ john.setName("John Smith");
+ cc.setCardOwner(john);
+ cc.setCreditCardNumber("1111-2222-3333-4444");
+ cc.setCreditCardType(CreditCardTypeType.VISA);
+ cc.setCVV2("1234");
+ cc.setExpMonth(1);
+ cc.setExpYear(2012);
+ createCustomer("John Smith", "john@xyz.com", cc);
+ }
+
+ @Destroy
+ public void destroy() {
+ // Save the customers
+ }
+
+ public Customer createCustomer(String name, String email, CreditCardDetailsType creditCard) {
+ Customer customer = new Customer();
+ customer.setId("c-" + idGenerator++);
+ customer.setName(name);
+ customer.setEmail(email);
+ customer.setCreditCard(creditCard);
+ customers.put(customer.getId(), customer);
+ return customer;
+ }
+
+ public boolean deleteCustomer(String id) {
+ return customers.remove(id) != null;
+ }
+
+ public Collection<Customer> getAllCustomers() {
+ return customers.values();
+ }
+
+ public Customer getCustomer(String id) throws CustomerNotFoundException {
+ Customer customer = customers.get(id);
+
+ if (customer == null) {
+ throw new CustomerNotFoundException("Customer " + id + " not found");
+ }
+
+ return customer;
+ }
+
+ public boolean updateCustomer(Customer customer) {
+ Customer current = null;
+ try {
+ current = getCustomer(customer.getId());
+ } catch (Exception ex) {
+ return false;
+ }
+
+ current.setEmail(customer.getEmail());
+ current.setName(customer.getName());
+ current.setCreditCard(customer.getCreditCard());
+ return true;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/EmailGateway.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/EmailGateway.java
new file mode 100644
index 0000000000..0fbf63d6bc
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/EmailGateway.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 com.tuscanyscatours.emailgateway;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * A gateway to send e-mail
+ */
+@Remotable
+public interface EmailGateway {
+ public boolean sendEmail(String sender, String recipient, String subject, String body);
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/impl/EmailGatewayImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/impl/EmailGatewayImpl.java
new file mode 100644
index 0000000000..d9798e436a
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/emailgateway/impl/EmailGatewayImpl.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 com.tuscanyscatours.emailgateway.impl;
+
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.emailgateway.EmailGateway;
+
+@Service(EmailGateway.class)
+public class EmailGatewayImpl implements EmailGateway {
+
+ public boolean sendEmail(String sender, String recipient, String subject, String body) {
+ System.out.println("From: " + sender);
+ System.out.println("To: " + recipient);
+ System.out.println("Subject: " + subject);
+ System.out.println(body);
+ return true;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AddressType.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AddressType.java
new file mode 100644
index 0000000000..ca3724a4f5
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AddressType.java
@@ -0,0 +1,191 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for AddressType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="AddressType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Street" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="City" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="State" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="ZipCode" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="HomePhone" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AddressType", propOrder = {
+ "street",
+ "city",
+ "state",
+ "zipCode",
+ "homePhone"
+})
+public class AddressType {
+
+ @XmlElement(name = "Street", required = true)
+ protected String street;
+ @XmlElement(name = "City", required = true)
+ protected String city;
+ @XmlElement(name = "State", required = true)
+ protected String state;
+ @XmlElement(name = "ZipCode", required = true)
+ protected String zipCode;
+ @XmlElement(name = "HomePhone", required = true)
+ protected String homePhone;
+
+ /**
+ * Gets the value of the street property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getStreet() {
+ return street;
+ }
+
+ /**
+ * Sets the value of the street property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setStreet(String value) {
+ this.street = value;
+ }
+
+ /**
+ * Gets the value of the city property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCity() {
+ return city;
+ }
+
+ /**
+ * Sets the value of the city property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCity(String value) {
+ this.city = value;
+ }
+
+ /**
+ * Gets the value of the state property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getState() {
+ return state;
+ }
+
+ /**
+ * Sets the value of the state property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setState(String value) {
+ this.state = value;
+ }
+
+ /**
+ * Gets the value of the zipCode property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getZipCode() {
+ return zipCode;
+ }
+
+ /**
+ * Sets the value of the zipCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setZipCode(String value) {
+ this.zipCode = value;
+ }
+
+ /**
+ * Gets the value of the homePhone property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHomePhone() {
+ return homePhone;
+ }
+
+ /**
+ * Sets the value of the homePhone property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHomePhone(String value) {
+ this.homePhone = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/Authorize.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/Authorize.java
new file mode 100644
index 0000000000..7c0b38198e
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/Authorize.java
@@ -0,0 +1,101 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="CreditCard" type="{http://www.tuscanyscatours.com/CreditCardPayment/}CreditCardDetailsType"/>
+ * &lt;element name="Amount" type="{http://www.w3.org/2001/XMLSchema}float"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "creditCard",
+ "amount"
+})
+@XmlRootElement(name = "authorize")
+public class Authorize {
+
+ @XmlElement(name = "CreditCard", required = true)
+ protected CreditCardDetailsType creditCard;
+ @XmlElement(name = "Amount")
+ protected float amount;
+
+ /**
+ * Gets the value of the creditCard property.
+ *
+ * @return
+ * possible object is
+ * {@link CreditCardDetailsType }
+ *
+ */
+ public CreditCardDetailsType getCreditCard() {
+ return creditCard;
+ }
+
+ /**
+ * Sets the value of the creditCard property.
+ *
+ * @param value
+ * allowed object is
+ * {@link CreditCardDetailsType }
+ *
+ */
+ public void setCreditCard(CreditCardDetailsType value) {
+ this.creditCard = value;
+ }
+
+ /**
+ * Gets the value of the amount property.
+ *
+ */
+ public float getAmount() {
+ return amount;
+ }
+
+ /**
+ * Sets the value of the amount property.
+ *
+ */
+ public void setAmount(float value) {
+ this.amount = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault.java
new file mode 100644
index 0000000000..84278aa508
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault.java
@@ -0,0 +1,81 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="errorCode" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "errorCode"
+})
+@XmlRootElement(name = "authorizeFault")
+public class AuthorizeFault {
+
+ @XmlElement(required = true)
+ protected String errorCode;
+
+ /**
+ * Gets the value of the errorCode property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ /**
+ * Sets the value of the errorCode property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setErrorCode(String value) {
+ this.errorCode = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault_Exception.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault_Exception.java
new file mode 100644
index 0000000000..ec0f8768da
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeFault_Exception.java
@@ -0,0 +1,71 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.ws.WebFault;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.7-b01-
+ * Generated source version: 2.1
+ *
+ */
+@WebFault(name = "authorizeFault", targetNamespace = "http://www.tuscanyscatours.com/CreditCardPayment/")
+public class AuthorizeFault_Exception
+ extends Exception
+{
+
+ /**
+ * Java type that goes as soapenv:Fault detail element.
+ *
+ */
+ private AuthorizeFault faultInfo;
+
+ /**
+ *
+ * @param message
+ * @param faultInfo
+ */
+ public AuthorizeFault_Exception(String message, AuthorizeFault faultInfo) {
+ super(message);
+ this.faultInfo = faultInfo;
+ }
+
+ /**
+ *
+ * @param message
+ * @param faultInfo
+ * @param cause
+ */
+ public AuthorizeFault_Exception(String message, AuthorizeFault faultInfo, Throwable cause) {
+ super(message, cause);
+ this.faultInfo = faultInfo;
+ }
+
+ /**
+ *
+ * @return
+ * returns fault bean: com.tuscanyscatours.payment.creditcard.AuthorizeFault
+ */
+ public AuthorizeFault getFaultInfo() {
+ return faultInfo;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeResponse.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeResponse.java
new file mode 100644
index 0000000000..05f3479804
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/AuthorizeResponse.java
@@ -0,0 +1,81 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for anonymous complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType>
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Status" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+ "status"
+})
+@XmlRootElement(name = "authorizeResponse")
+public class AuthorizeResponse {
+
+ @XmlElement(name = "Status", required = true)
+ protected String status;
+
+ /**
+ * Gets the value of the status property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the value of the status property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setStatus(String value) {
+ this.status = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CardCompany.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CardCompany.java
new file mode 100644
index 0000000000..dbffbe2c19
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CardCompany.java
@@ -0,0 +1,31 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface CardCompany {
+
+ public String makePayment(CreditCardDetailsType ccDetails,
+ float amount,
+ CallableReference<CreditCardConfirm> callbackRef);
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardConfirm.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardConfirm.java
new file mode 100644
index 0000000000..ff3b2d74b4
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardConfirm.java
@@ -0,0 +1,27 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface CreditCardConfirm {
+ void confirmPayment(String paymentRef);
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardDetailsType.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardDetailsType.java
new file mode 100644
index 0000000000..8bac29f6bd
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardDetailsType.java
@@ -0,0 +1,219 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for CreditCardDetailsType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="CreditCardDetailsType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="CreditCardType" type="{http://www.tuscanyscatours.com/CreditCardPayment/}CreditCardTypeType" minOccurs="0"/>
+ * &lt;element name="CreditCardNumber" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="ExpMonth" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="ExpYear" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="CardOwner" type="{http://www.tuscanyscatours.com/CreditCardPayment/}PayerType" minOccurs="0"/>
+ * &lt;element name="CVV2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CreditCardDetailsType", propOrder = {
+ "creditCardType",
+ "creditCardNumber",
+ "expMonth",
+ "expYear",
+ "cardOwner",
+ "cvv2"
+})
+public class CreditCardDetailsType {
+
+ @XmlElement(name = "CreditCardType")
+ protected CreditCardTypeType creditCardType;
+ @XmlElement(name = "CreditCardNumber")
+ protected String creditCardNumber;
+ @XmlElement(name = "ExpMonth")
+ protected Integer expMonth;
+ @XmlElement(name = "ExpYear")
+ protected Integer expYear;
+ @XmlElement(name = "CardOwner")
+ protected PayerType cardOwner;
+ @XmlElement(name = "CVV2")
+ protected String cvv2;
+
+ /**
+ * Gets the value of the creditCardType property.
+ *
+ * @return
+ * possible object is
+ * {@link CreditCardTypeType }
+ *
+ */
+ public CreditCardTypeType getCreditCardType() {
+ return creditCardType;
+ }
+
+ /**
+ * Sets the value of the creditCardType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link CreditCardTypeType }
+ *
+ */
+ public void setCreditCardType(CreditCardTypeType value) {
+ this.creditCardType = value;
+ }
+
+ /**
+ * Gets the value of the creditCardNumber property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCreditCardNumber() {
+ return creditCardNumber;
+ }
+
+ /**
+ * Sets the value of the creditCardNumber property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCreditCardNumber(String value) {
+ this.creditCardNumber = value;
+ }
+
+ /**
+ * Gets the value of the expMonth property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getExpMonth() {
+ return expMonth;
+ }
+
+ /**
+ * Sets the value of the expMonth property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setExpMonth(Integer value) {
+ this.expMonth = value;
+ }
+
+ /**
+ * Gets the value of the expYear property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getExpYear() {
+ return expYear;
+ }
+
+ /**
+ * Sets the value of the expYear property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setExpYear(Integer value) {
+ this.expYear = value;
+ }
+
+ /**
+ * Gets the value of the cardOwner property.
+ *
+ * @return
+ * possible object is
+ * {@link PayerType }
+ *
+ */
+ public PayerType getCardOwner() {
+ return cardOwner;
+ }
+
+ /**
+ * Sets the value of the cardOwner property.
+ *
+ * @param value
+ * allowed object is
+ * {@link PayerType }
+ *
+ */
+ public void setCardOwner(PayerType value) {
+ this.cardOwner = value;
+ }
+
+ /**
+ * Gets the value of the cvv2 property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCVV2() {
+ return cvv2;
+ }
+
+ /**
+ * Sets the value of the cvv2 property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCVV2(String value) {
+ this.cvv2 = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPayment.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPayment.java
new file mode 100644
index 0000000000..da3d32fc0b
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPayment.java
@@ -0,0 +1,31 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+@Callback(CreditCardSecurity.class)
+public interface CreditCardPayment {
+
+ public String authorize(CreditCardDetailsType ccDetails, float amount)
+ throws AuthorizeFault_Exception;
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPaymentConfirm.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPaymentConfirm.java
new file mode 100644
index 0000000000..0c775f3621
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardPaymentConfirm.java
@@ -0,0 +1,31 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+@Callback(CreditCardConfirm.class)
+public interface CreditCardPaymentConfirm {
+
+ public String authorize(CreditCardDetailsType ccDetails, float amount)
+ throws AuthorizeFault_Exception;
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardSecurity.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardSecurity.java
new file mode 100644
index 0000000000..ae367c9f1e
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardSecurity.java
@@ -0,0 +1,27 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import org.osoa.sca.annotations.Remotable;
+
+@Remotable
+public interface CreditCardSecurity {
+ String checkSecurity(String securityPrompt);
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardTypeType.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardTypeType.java
new file mode 100644
index 0000000000..0467078279
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/CreditCardTypeType.java
@@ -0,0 +1,74 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for CreditCardTypeType.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * <p>
+ * <pre>
+ * &lt;simpleType name="CreditCardTypeType">
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}token">
+ * &lt;enumeration value="Visa"/>
+ * &lt;enumeration value="MasterCard"/>
+ * &lt;enumeration value="Discover"/>
+ * &lt;enumeration value="Amex"/>
+ * &lt;/restriction>
+ * &lt;/simpleType>
+ * </pre>
+ *
+ */
+@XmlType(name = "CreditCardTypeType")
+@XmlEnum
+public enum CreditCardTypeType {
+
+ @XmlEnumValue("Visa")
+ VISA("Visa"),
+ @XmlEnumValue("MasterCard")
+ MASTER_CARD("MasterCard"),
+ @XmlEnumValue("Discover")
+ DISCOVER("Discover"),
+ @XmlEnumValue("Amex")
+ AMEX("Amex");
+ private final String value;
+
+ CreditCardTypeType(String v) {
+ value = v;
+ }
+
+ public String value() {
+ return value;
+ }
+
+ public static CreditCardTypeType fromValue(String v) {
+ for (CreditCardTypeType c: CreditCardTypeType.values()) {
+ if (c.value.equals(v)) {
+ return c;
+ }
+ }
+ throw new IllegalArgumentException(v);
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/PayerType.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/PayerType.java
new file mode 100644
index 0000000000..f36fe35bdf
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/PayerType.java
@@ -0,0 +1,107 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for PayerType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="PayerType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="Address" type="{http://www.tuscanyscatours.com/CreditCardPayment/}AddressType"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PayerType", propOrder = {
+ "name",
+ "address"
+})
+public class PayerType {
+
+ @XmlElement(name = "Name", required = true)
+ protected String name;
+ @XmlElement(name = "Address", required = true)
+ protected AddressType address;
+
+ /**
+ * Gets the value of the name property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the value of the name property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setName(String value) {
+ this.name = value;
+ }
+
+ /**
+ * Gets the value of the address property.
+ *
+ * @return
+ * possible object is
+ * {@link AddressType }
+ *
+ */
+ public AddressType getAddress() {
+ return address;
+ }
+
+ /**
+ * Sets the value of the address property.
+ *
+ * @param value
+ * allowed object is
+ * {@link AddressType }
+ *
+ */
+ public void setAddress(AddressType value) {
+ this.address = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CardCompanyImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CardCompanyImpl.java
new file mode 100644
index 0000000000..55759e7b20
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CardCompanyImpl.java
@@ -0,0 +1,60 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard.impl;
+
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.payment.creditcard.CardCompany;
+import com.tuscanyscatours.payment.creditcard.CreditCardConfirm;
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+
+
+@Service(CardCompany.class)
+public class CardCompanyImpl implements CardCompany {
+
+ public String makePayment(CreditCardDetailsType ccDetails,
+ float amount,
+ CallableReference<CreditCardConfirm> callbackRef){
+ // payment processing happens asynchronously
+ Thread app = new Thread(new AsycnhPaymentProcessing(callbackRef));
+ app.start();
+ return "OK";
+ }
+
+ class AsycnhPaymentProcessing implements Runnable {
+ CallableReference<CreditCardConfirm> callbackRef;
+
+ AsycnhPaymentProcessing(CallableReference<CreditCardConfirm> callbackRef){
+ this.callbackRef = callbackRef;
+ }
+ public void run() {
+ String paymentRef = "123456";
+
+ try {
+ Thread.sleep(1000);
+ } catch (Exception ex) {
+ // do nothing
+ }
+
+ callbackRef.getService().confirmPayment(paymentRef);
+ }
+ }
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentCallbackImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentCallbackImpl.java
new file mode 100644
index 0000000000..bd578bc810
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentCallbackImpl.java
@@ -0,0 +1,78 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard.impl;
+
+import org.osoa.sca.RequestContext;
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Context;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
+import com.tuscanyscatours.payment.creditcard.CreditCardSecurity;
+
+@Service(CreditCardPayment.class)
+public class CreditCardPaymentCallbackImpl implements CreditCardPayment {
+
+ @Callback
+ protected CreditCardSecurity ccSecurity;
+
+ @Context
+ protected RequestContext rqContext;
+
+
+ public String authorize(CreditCardDetailsType card, float amount) {
+ if (amount > 1000) {
+ for (int i = 0; i < 3; i++) {
+ String pwd = null;
+ if (amount < 10000) {
+ // using injected callback proxy
+ pwd = ccSecurity.checkSecurity("Enter password");
+ } else {
+ // using request context to get callback proxy
+ CreditCardSecurity ccSecurity = rqContext.getCallback();
+ pwd = ccSecurity.checkSecurity("Enter password");
+ }
+
+ if (verifyPassword(card, pwd)) {
+ break;
+ }
+ if (i == 2) {
+ return "BadPassword";
+ }
+ }
+ }
+ makePayment(card, amount);
+ return "OK";
+ }
+
+ private boolean verifyPassword(CreditCardDetailsType card, String pw) {
+ if (pw.equals("abcxyz")){
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private void makePayment(CreditCardDetailsType card, float amount) {
+ // payment processing
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentConfirmImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentConfirmImpl.java
new file mode 100644
index 0000000000..02f1f46f82
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/creditcard/impl/CreditCardPaymentConfirmImpl.java
@@ -0,0 +1,48 @@
+/*
+ * 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 com.tuscanyscatours.payment.creditcard.impl;
+
+import org.osoa.sca.CallableReference;
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.payment.creditcard.CardCompany;
+import com.tuscanyscatours.payment.creditcard.CreditCardConfirm;
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+import com.tuscanyscatours.payment.creditcard.CreditCardPaymentConfirm;
+
+@Service(CreditCardPaymentConfirm.class)
+public class CreditCardPaymentConfirmImpl implements CreditCardPaymentConfirm {
+
+ @Callback
+ protected CallableReference<CreditCardConfirm> callbackRef;
+
+ @Reference
+ protected CardCompany cardCompany;
+
+ public String authorize(CreditCardDetailsType card,
+ float amount) {
+ cardCompany.makePayment(card, amount, callbackRef);
+ return "InProgress";
+ }
+
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/CreditCardSecurityImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/CreditCardSecurityImpl.java
new file mode 100644
index 0000000000..94ffead262
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/CreditCardSecurityImpl.java
@@ -0,0 +1,38 @@
+/*
+ * 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 com.tuscanyscatours.payment.impl;
+
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardSecurity;
+
+/**
+ * The payment implementation
+ */
+@Service(CreditCardSecurity.class)
+public class CreditCardSecurityImpl implements CreditCardSecurity {
+
+ public String checkSecurity(String securityPrompt) {
+ System.out.println("Extra securiy - " + securityPrompt);
+ System.out.println("password = abcxyz");
+ return "abcxyz";
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackIDImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackIDImpl.java
new file mode 100644
index 0000000000..887d54c4e7
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackIDImpl.java
@@ -0,0 +1,90 @@
+/*
+ * 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 com.tuscanyscatours.payment.impl;
+
+import org.osoa.sca.RequestContext;
+import org.osoa.sca.ServiceReference;
+import org.osoa.sca.annotations.Context;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.emailgateway.EmailGateway;
+import com.tuscanyscatours.payment.Payment;
+import com.tuscanyscatours.payment.creditcard.AuthorizeFault_Exception;
+import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
+import com.tuscanyscatours.payment.creditcard.CreditCardSecurity;
+
+/**
+ * The payment implementation
+ */
+@Service(Payment.class)
+public class PaymentCallbackIDImpl implements Payment,
+ CreditCardSecurity {
+
+ @Reference
+ protected CustomerRegistry customerRegistry;
+
+ @Reference(name="creditCardPayment")
+ protected ServiceReference<CreditCardPayment> cpRef;
+;
+
+ @Reference
+ protected EmailGateway emailGateway;
+
+ @Property
+ protected float transactionFee = 0.01f;
+
+ @Context
+ protected RequestContext rqContext;
+
+ public String makePaymentMember(String customerId, float amount) {
+ try {
+ Customer customer = customerRegistry.getCustomer(customerId);
+ String auditID = "987654321";
+ cpRef.setCallbackID(auditID);
+ String status = cpRef.getService().authorize(customer.getCreditCard(), amount + transactionFee);
+ emailGateway.sendEmail("order@tuscanyscatours.com",
+ customer.getEmail(),
+ "Status for your payment",
+ customer + " >>> Status = " + status);
+ return status;
+ } catch (CustomerNotFoundException ex) {
+ return "Payment failed due to " + ex.getMessage();
+ } catch (AuthorizeFault_Exception e) {
+ return e.getFaultInfo().getErrorCode();
+ } catch (Throwable t) {
+ return "Payment failed due to system error " + t.getMessage();
+ }
+ }
+
+ public String checkSecurity(String securityPrompt) {
+ System.out.println("Extra securiy - " + securityPrompt);
+ System.out.println("password = abcxyz");
+ Object cbID = rqContext.getServiceReference().getCallbackID();
+ System.out.println("callback ID = " + cbID);
+
+ return "abcxyz";
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackImpl.java
new file mode 100644
index 0000000000..63b61d685d
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackImpl.java
@@ -0,0 +1,78 @@
+/*
+ * 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 com.tuscanyscatours.payment.impl;
+
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.emailgateway.EmailGateway;
+import com.tuscanyscatours.payment.Payment;
+import com.tuscanyscatours.payment.creditcard.AuthorizeFault_Exception;
+import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
+import com.tuscanyscatours.payment.creditcard.CreditCardSecurity;
+
+/**
+ * The payment implementation
+ */
+@Service(Payment.class)
+public class PaymentCallbackImpl implements Payment,
+ CreditCardSecurity {
+
+ @Reference
+ protected CustomerRegistry customerRegistry;
+
+ @Reference
+ protected CreditCardPayment creditCardPayment;
+
+ @Reference
+ protected EmailGateway emailGateway;
+
+ @Property
+ protected float transactionFee = 0.01f;
+
+ public String makePaymentMember(String customerId, float amount) {
+ try {
+ Customer customer = customerRegistry.getCustomer(customerId);
+ String status = creditCardPayment.authorize(customer.getCreditCard(), amount + transactionFee);
+ emailGateway.sendEmail("order@tuscanyscatours.com",
+ customer.getEmail(),
+ "Status for your payment",
+ customer + " >>> Status = " + status);
+ return status;
+ } catch (CustomerNotFoundException ex) {
+ return "Payment failed due to " + ex.getMessage();
+ } catch (AuthorizeFault_Exception e) {
+ return e.getFaultInfo().getErrorCode();
+ } catch (Throwable t) {
+ return "Payment failed due to system error " + t.getMessage();
+ }
+ }
+
+ public String checkSecurity(String securityPrompt) {
+ System.out.println("Extra securiy - " + securityPrompt);
+ System.out.println("password = abcxyz");
+ return "abcxyz";
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackRedirectImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackRedirectImpl.java
new file mode 100644
index 0000000000..bf554dbad5
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentCallbackRedirectImpl.java
@@ -0,0 +1,83 @@
+/*
+ * 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 com.tuscanyscatours.payment.impl;
+
+import org.osoa.sca.ServiceReference;
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.emailgateway.EmailGateway;
+import com.tuscanyscatours.payment.Payment;
+import com.tuscanyscatours.payment.creditcard.AuthorizeFault_Exception;
+import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
+import com.tuscanyscatours.payment.creditcard.CreditCardSecurity;
+
+/**
+ * The payment implementation
+ */
+@Service(Payment.class)
+public class PaymentCallbackRedirectImpl implements Payment,
+ CreditCardSecurity {
+
+ @Reference
+ protected CustomerRegistry customerRegistry;
+
+ @Reference(name="creditCardPayment")
+ protected ServiceReference<CreditCardPayment> cpRef;
+
+ @Reference(name="creditCardSecurity")
+ protected ServiceReference<CreditCardSecurity> csRef;
+
+ @Reference
+ protected EmailGateway emailGateway;
+
+ @Property
+ protected float transactionFee = 0.01f;
+
+ public String makePaymentMember(String customerId, float amount) {
+ try {
+ Customer customer = customerRegistry.getCustomer(customerId);
+ cpRef.setCallback(csRef);
+ String status = cpRef.getService().authorize(customer.getCreditCard(), amount + transactionFee);
+ emailGateway.sendEmail("order@tuscanyscatours.com",
+ customer.getEmail(),
+ "Status for your payment",
+ customer + " >>> Status = " + status);
+ return status;
+ } catch (CustomerNotFoundException ex) {
+ return "Payment failed due to " + ex.getMessage();
+ } catch (AuthorizeFault_Exception e) {
+ return e.getFaultInfo().getErrorCode();
+ } catch (Throwable t) {
+ return "Payment failed due to system error " + t.getMessage();
+ }
+ }
+
+ public String checkSecurity(String securityPrompt) {
+ System.out.println("Extra securiy - " + securityPrompt);
+ System.out.println("password = abcxyz");
+ return "abcxyz";
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentConfirmImpl.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentConfirmImpl.java
new file mode 100644
index 0000000000..1a9c35c65d
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/java/com/tuscanyscatours/payment/impl/PaymentConfirmImpl.java
@@ -0,0 +1,77 @@
+/*
+ * 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 com.tuscanyscatours.payment.impl;
+
+import org.osoa.sca.annotations.Property;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.emailgateway.EmailGateway;
+import com.tuscanyscatours.payment.Payment;
+import com.tuscanyscatours.payment.creditcard.AuthorizeFault_Exception;
+import com.tuscanyscatours.payment.creditcard.CreditCardConfirm;
+import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
+import com.tuscanyscatours.payment.creditcard.CreditCardPaymentConfirm;
+
+/**
+ * The payment implementation
+ */
+@Service(Payment.class)
+public class PaymentConfirmImpl implements Payment,
+ CreditCardConfirm {
+
+ @Reference
+ protected CustomerRegistry customerRegistry;
+
+ @Reference
+ protected CreditCardPaymentConfirm creditCardPayment;
+
+ @Reference
+ protected EmailGateway emailGateway;
+
+ @Property
+ protected float transactionFee = 0.01f;
+
+ public String makePaymentMember(String customerId, float amount) {
+ try {
+ Customer customer = customerRegistry.getCustomer(customerId);
+ String status = creditCardPayment.authorize(customer.getCreditCard(), amount + transactionFee);
+ emailGateway.sendEmail("order@tuscanyscatours.com",
+ customer.getEmail(),
+ "Status for your payment",
+ customer + " >>> Status = " + status);
+ return status;
+ } catch (CustomerNotFoundException ex) {
+ return "Payment failed due to " + ex.getMessage();
+ } catch (AuthorizeFault_Exception e) {
+ return e.getFaultInfo().getErrorCode();
+ } catch (Throwable t) {
+ return "Payment failed due to system error " + t.getMessage();
+ }
+ }
+
+ public void confirmPayment(String paymentRef) {
+ System.out.println("Pament ref is - " + paymentRef);
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/CreditCardPayment.wsdl b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/CreditCardPayment.wsdl
new file mode 100644
index 0000000000..08be3dc2e2
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/CreditCardPayment.wsdl
@@ -0,0 +1,132 @@
+<?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.tuscanyscatours.com/CreditCardPayment/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://www.tuscanyscatours.com/CreditCardPayment/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/">
+ <wsdl:types>
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.tuscanyscatours.com/CreditCardPayment/"
+ xmlns:tns="http://www.tuscanyscatours.com/CreditCardPayment/">
+
+ <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.tuscanyscatours.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>
+
+ <plnk:partnerLinkType name="CreditCardPaymentLinkType">
+ <plnk:role name="forward" portType="tns:CreditCardPayment"/>
+ </plnk:partnerLinkType>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/META-INF/sca-contribution.xml b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..0fd7cb9910
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/META-INF/sca-contribution.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:scatours="http://tuscanyscatours.com/">
+ <export.java package="com.tuscanyscatours.payment" />
+ <deployable composite="scatours:payment" />
+</contribution>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/Payment.wsdl b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/Payment.wsdl
new file mode 100644
index 0000000000..2519d7642e
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/Payment.wsdl
@@ -0,0 +1,83 @@
+<?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="Payment"
+ targetNamespace="http://www.tuscanyscatours.com/Payment/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://www.tuscanyscatours.com/Payment/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/">
+ <wsdl:types>
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.tuscanyscatours.com/Payment/"
+ xmlns:tns="http://www.tuscanyscatours.com/Payment/">
+
+ <xsd:complexType name="MakePaymentMemberType">
+ <xsd:sequence>
+ <xsd:element name="CustomerId" type="xsd:string"></xsd:element>
+ <xsd:element name="Amount" type="xsd:float"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="makePaymentMember" type="tns:MakePaymentMemberType"/>
+
+ <xsd:complexType name="MakePaymentMemberResponseType">
+ <xsd:sequence>
+ <xsd:element name="Status" type="xsd:string"></xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="makePaymentMemberResponse" type="tns:MakePaymentMemberResponseType"/>
+
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="MakePaymentMemberRequest">
+ <wsdl:part name="parameters" element="tns:makePaymentMember"></wsdl:part>
+ </wsdl:message>
+ <wsdl:message name="MakePaymentMemberResponse">
+ <wsdl:part name="parameters" element="tns:makePaymentMemberResponse"></wsdl:part>
+ </wsdl:message>
+ <wsdl:portType name="Payment">
+ <wsdl:operation name="makePaymentMember">
+ <wsdl:input message="tns:MakePaymentMemberRequest"></wsdl:input>
+ <wsdl:output message="tns:MakePaymentMemberResponse"></wsdl:output>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="PaymentBinding" type="tns:Payment">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="makePaymentMember">
+ <soap:operation soapAction="http://www.tuscanyscatours.com/Payment/makePayment" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="PaymentService">
+ <wsdl:port name="PaymentPort" binding="tns:PaymentBinding">
+ <soap:address location="http://localhost:8083/Payment" />
+ </wsdl:port>
+ </wsdl:service>
+
+ <plnk:partnerLinkType name="PaymentLinkType">
+ <plnk:role name="forward" portType="tns:Payment"/>
+ </plnk:partnerLinkType>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/definitions.xml b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/definitions.xml
new file mode 100644
index 0000000000..b304bbfc2b
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/definitions.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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.
+-->
+<definitions xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/1.0">
+
+ <!-- Policy Intents Defined by the SCA Runtime -->
+ <intent name="authorization" constrains="sca:implementation"/>
+ <intent name="managedTransaction" constrains="sca:implementation"/>
+ <intent name="managedTransaction.global"/>
+
+ <!-- Policy intents -->
+ <policySet name="ps1" provides="sca:authorization" appliesTo="sca:implementation.java"/>
+
+ <policySet name="ps2" provides="sca:managedTransaction.global" appliesTo="sca:implementation.java"/>
+
+</definitions>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/payment.composite b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/payment.composite
new file mode 100644
index 0000000000..6707b8a6cc
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/main/resources/payment.composite
@@ -0,0 +1,118 @@
+<?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://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://tuscanyscatours.com/"
+ name="payment">
+
+ <!-- standard callbacks -->
+ <component name="Payment1">
+ <implementation.java class="com.tuscanyscatours.payment.impl.PaymentCallbackImpl" />
+ <service name="Payment">
+ <binding.ws uri="http://localhost:8081/Payment" />
+ <binding.sca />
+ </service>
+ <reference name="customerRegistry" target="CustomerRegistry" />
+ <reference name="creditCardPayment" target="CreditCardPayment"/>
+ <reference name="emailGateway" target="EmailGateway" />
+ <property name="transactionFee">0.02</property>
+ </component>
+
+ <component name="Payment2">
+ <implementation.java class="com.tuscanyscatours.payment.impl.PaymentCallbackImpl" />
+ <service name="Payment">
+ <binding.ws uri="http://localhost:8081/Payment" />
+ <binding.sca />
+ </service>
+ <reference name="customerRegistry" target="CustomerRegistry" />
+ <reference name="creditCardPayment" target="CreditCardPayment"/>
+ <reference name="emailGateway" target="EmailGateway" />
+ <property name="transactionFee">0.02</property>
+ </component>
+
+ <!-- callbacks passed as callable references -->
+ <component name="PaymentConfirm">
+ <implementation.java class="com.tuscanyscatours.payment.impl.PaymentConfirmImpl" />
+ <service name="Payment">
+ <binding.ws uri="http://localhost:8081/Payment" />
+ <binding.sca />
+ </service>
+ <reference name="customerRegistry" target="CustomerRegistry" />
+ <reference name="creditCardPayment" target="CreditCardPaymentConfirm"/>
+ <reference name="emailGateway" target="EmailGateway" />
+ <property name="transactionFee">0.02</property>
+ </component>
+
+ <component name="CreditCardPaymentConfirm">
+ <implementation.java class="com.tuscanyscatours.payment.creditcard.impl.CreditCardPaymentConfirmImpl" />
+ <reference name="cardCompany" target="CardCompany" />
+ </component>
+
+ <component name="CardCompany">
+ <implementation.java class="com.tuscanyscatours.payment.creditcard.impl.CardCompanyImpl" />
+ </component>
+
+ <!-- callback ID -->
+
+ <component name="PaymentCallbackID">
+ <implementation.java class="com.tuscanyscatours.payment.impl.PaymentCallbackIDImpl" />
+ <service name="Payment">
+ <binding.ws uri="http://localhost:8081/Payment" />
+ <binding.sca />
+ </service>
+ <reference name="customerRegistry" target="CustomerRegistry" />
+ <reference name="creditCardPayment" target="CreditCardPayment"/>
+ <reference name="emailGateway" target="EmailGateway" />
+ <property name="transactionFee">0.02</property>
+ </component>
+
+ <!-- callback Redirection -->
+
+ <component name="PaymentCallbackRedirect">
+ <implementation.java class="com.tuscanyscatours.payment.impl.PaymentCallbackRedirectImpl" />
+ <service name="Payment">
+ <binding.ws uri="http://localhost:8081/Payment" />
+ <binding.sca />
+ </service>
+ <reference name="customerRegistry" target="CustomerRegistry" />
+ <reference name="creditCardPayment" target="CreditCardPayment"/>
+ <reference name="creditCardSecurity" target="CreditCardSecurity"/>
+ <reference name="emailGateway" target="EmailGateway" />
+ <property name="transactionFee">0.02</property>
+ </component>
+
+ <component name="CreditCardSecurity">
+ <implementation.java class="com.tuscanyscatours.payment.impl.CreditCardSecurityImpl" />
+ </component>
+
+ <!-- component common to multiple scenarios -->
+
+ <component name="CustomerRegistry">
+ <implementation.java class="com.tuscanyscatours.customer.impl.CustomerRegistryImpl" />
+ </component>
+
+ <component name="CreditCardPayment">
+ <implementation.java class="com.tuscanyscatours.payment.creditcard.impl.CreditCardPaymentCallbackImpl" />
+ </component>
+
+ <component name="EmailGateway">
+ <implementation.java class="com.tuscanyscatours.emailgateway.impl.EmailGatewayImpl" />
+ </component>
+
+</composite> \ No newline at end of file
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/test/java/scatours/payment/PaymentTestCase.java b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/test/java/scatours/payment/PaymentTestCase.java
new file mode 100644
index 0000000000..2108f21c5e
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/payment-java-callback/src/test/java/scatours/payment/PaymentTestCase.java
@@ -0,0 +1,103 @@
+/*
+ * 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 scatours.payment;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCAContribution;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.tuscanyscatours.payment.Payment;
+
+public class PaymentTestCase {
+ private static SCANode node;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ node =
+ SCANodeFactory.newInstance()
+ .createSCANode(null,
+ new SCAContribution("payment", "./target/classes"));
+ node.start();
+ }
+
+ @Test
+ public void testPayment() {
+ SCAClient client = (SCAClient)node;
+ Payment payment1 = client.getService(Payment.class, "Payment1");
+ Payment payment2 = client.getService(Payment.class, "Payment2");
+ Payment paymentConfirm = client.getService(Payment.class, "PaymentConfirm");
+ Payment paymentCallbackID = client.getService(Payment.class, "PaymentCallbackID");
+ Payment paymentCallbackRedirect = client.getService(Payment.class, "PaymentCallbackRedirect");
+
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment1 under limit - Status = \n\n" + payment1.makePaymentMember("c-0", 100.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 under limit - Status = \n\n" + payment2.makePaymentMember("c-0", 100.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment1 over limit - Status = \n\n" + payment1.makePaymentMember("c-0", 1500.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 over limit - Status = \n\n" + payment2.makePaymentMember("c-0", 1500.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 using request context - Status = \n\n" + payment2.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentConfirm - Status = \n\n" + paymentConfirm.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+
+ // wait for longer that the asynch payment processing waits.
+ try {
+ Thread.sleep(2000);
+ } catch (Exception ex) {
+ // do nothing
+ }
+
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentCallbackID - Status = \n\n" + paymentCallbackID.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentCallbackRedirect - Status = \n\n" + paymentCallbackRedirect.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+
+
+ }
+
+ @Test
+ @Ignore
+ public void testWaitForInput() {
+ System.out.println("Press a key to end");
+ try {
+ System.in.read();
+ } catch (Exception ex) {
+ }
+ System.out.println("Shutting down");
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ if (node != null) {
+ node.stop();
+ node = null;
+ }
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/contributions/pom.xml b/sca-java-1.x/trunk/tutorials/travelsample/contributions/pom.xml
index 68708e55e1..4c4ff47e4c 100644
--- a/sca-java-1.x/trunk/tutorials/travelsample/contributions/pom.xml
+++ b/sca-java-1.x/trunk/tutorials/travelsample/contributions/pom.xml
@@ -83,6 +83,7 @@
<module>trip</module>
<module>scatours</module>
<module>payment-java</module>
+ <module>payment-java-callback</module>
<module>payment-java-policy</module>
<module>payment-spring</module>
<module>payment-spring-policy</module>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/build.xml b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/build.xml
new file mode 100644
index 0000000000..725a92e516
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/build.xml
@@ -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.
+-->
+
+<project name="scatours-launcher-payment-java-callback" default="compile">
+ <import file="../../antdefs.xml"/>
+ <path id="compile-path">
+ <pathelement path="../../util/launcher-common/target/scatours-util-launcher-common.jar"/>
+ </path>
+
+ <target name="run">
+ <java classname="scatours.payment.PaymentLauncher" fork="true" failonerror="true">
+ <classpath>
+ <pathelement location="target/${ant.project.name}.jar"/>
+ <path refid="compile-path"/>
+ <pathelement location="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
+ </classpath>
+ </java>
+ </target>
+</project>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/pom.xml b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/pom.xml
new file mode 100644
index 0000000000..0e12b5608b
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/pom.xml
@@ -0,0 +1,122 @@
+<?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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>scatours</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent><version>1.0-SNAPSHOT</version>
+ <artifactId>scatours-launcher-payment-java-callback</artifactId>
+ <name>Apache Tuscany SCA Tours Payment Java Callback Launcher</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>scatours-util-launcher-common</artifactId>
+ <version>${pom.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-api</artifactId>
+ <version>${tuscany.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.ws</groupId>
+ <artifactId>jaxws-api</artifactId>
+ <version>2.1</version>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.xml.soap</groupId>
+ <artifactId>saaj-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-impl</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-jetty</artifactId>
+ <version>${tuscany.version}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <archive>
+ <manifestEntries>
+ <Class-Path>../util/scatours-util-launcher-common.jar</Class-Path>
+ </manifestEntries>
+ <manifest>
+ <addClasspath>${scatours.selfContained}</addClasspath>
+ <classpathPrefix>../lib/</classpathPrefix>
+ <mainClass>scatours.payment.PaymentLauncher</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberResponseType.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberResponseType.java
new file mode 100644
index 0000000000..e5f3ef3cad
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberResponseType.java
@@ -0,0 +1,62 @@
+
+package com.tuscanyscatours.payment;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for MakePaymentMemberResponseType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="MakePaymentMemberResponseType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Status" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "MakePaymentMemberResponseType", propOrder = {
+ "status"
+})
+public class MakePaymentMemberResponseType {
+
+ @XmlElement(name = "Status", required = true)
+ protected String status;
+
+ /**
+ * Gets the value of the status property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the value of the status property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setStatus(String value) {
+ this.status = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberType.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberType.java
new file mode 100644
index 0000000000..ca94d86628
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/MakePaymentMemberType.java
@@ -0,0 +1,82 @@
+
+package com.tuscanyscatours.payment;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for MakePaymentMemberType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="MakePaymentMemberType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="CustomerId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="Amount" type="{http://www.w3.org/2001/XMLSchema}float"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "MakePaymentMemberType", propOrder = {
+ "customerId",
+ "amount"
+})
+public class MakePaymentMemberType {
+
+ @XmlElement(name = "CustomerId", required = true)
+ protected String customerId;
+ @XmlElement(name = "Amount")
+ protected float amount;
+
+ /**
+ * Gets the value of the customerId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCustomerId() {
+ return customerId;
+ }
+
+ /**
+ * Sets the value of the customerId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCustomerId(String value) {
+ this.customerId = value;
+ }
+
+ /**
+ * Gets the value of the amount property.
+ *
+ */
+ public float getAmount() {
+ return amount;
+ }
+
+ /**
+ * Sets the value of the amount property.
+ *
+ */
+ public void setAmount(float value) {
+ this.amount = value;
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/ObjectFactory.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/ObjectFactory.java
new file mode 100644
index 0000000000..b069b2ba94
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/ObjectFactory.java
@@ -0,0 +1,71 @@
+
+package com.tuscanyscatours.payment;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the com.tuscanyscatours.payment package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ private final static QName _MakePaymentMember_QNAME = new QName("http://www.tuscanyscatours.com/Payment/", "makePaymentMember");
+ private final static QName _MakePaymentMemberResponse_QNAME = new QName("http://www.tuscanyscatours.com/Payment/", "makePaymentMemberResponse");
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.tuscanyscatours.payment
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link MakePaymentMemberResponseType }
+ *
+ */
+ public MakePaymentMemberResponseType createMakePaymentMemberResponseType() {
+ return new MakePaymentMemberResponseType();
+ }
+
+ /**
+ * Create an instance of {@link MakePaymentMemberType }
+ *
+ */
+ public MakePaymentMemberType createMakePaymentMemberType() {
+ return new MakePaymentMemberType();
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link MakePaymentMemberType }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.tuscanyscatours.com/Payment/", name = "makePaymentMember")
+ public JAXBElement<MakePaymentMemberType> createMakePaymentMember(MakePaymentMemberType value) {
+ return new JAXBElement<MakePaymentMemberType>(_MakePaymentMember_QNAME, MakePaymentMemberType.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link MakePaymentMemberResponseType }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.tuscanyscatours.com/Payment/", name = "makePaymentMemberResponse")
+ public JAXBElement<MakePaymentMemberResponseType> createMakePaymentMemberResponse(MakePaymentMemberResponseType value) {
+ return new JAXBElement<MakePaymentMemberResponseType>(_MakePaymentMemberResponse_QNAME, MakePaymentMemberResponseType.class, null, value);
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/Payment.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/Payment.java
new file mode 100644
index 0000000000..bbbd03d89a
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/Payment.java
@@ -0,0 +1,43 @@
+
+package com.tuscanyscatours.payment;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.7-b01-
+ * Generated source version: 2.1
+ *
+ */
+@WebService(name = "Payment", targetNamespace = "http://www.tuscanyscatours.com/Payment/")
+@XmlSeeAlso({
+ ObjectFactory.class
+})
+public interface Payment {
+
+
+ /**
+ *
+ * @param amount
+ * @param customerId
+ * @return
+ * returns java.lang.String
+ */
+ @WebMethod(action = "http://www.tuscanyscatours.com/Payment/makePayment")
+ @WebResult(name = "Status", targetNamespace = "")
+ @RequestWrapper(localName = "makePaymentMember", targetNamespace = "http://www.tuscanyscatours.com/Payment/", className = "com.tuscanyscatours.payment.MakePaymentMemberType")
+ @ResponseWrapper(localName = "makePaymentMemberResponse", targetNamespace = "http://www.tuscanyscatours.com/Payment/", className = "com.tuscanyscatours.payment.MakePaymentMemberResponseType")
+ public String makePaymentMember(
+ @WebParam(name = "CustomerId", targetNamespace = "")
+ String customerId,
+ @WebParam(name = "Amount", targetNamespace = "")
+ float amount);
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/PaymentService.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/PaymentService.java
new file mode 100644
index 0000000000..a430175976
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/PaymentService.java
@@ -0,0 +1,71 @@
+
+package com.tuscanyscatours.payment;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.logging.Logger;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceFeature;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.7-b01-
+ * Generated source version: 2.1
+ *
+ */
+@WebServiceClient(name = "PaymentService", targetNamespace = "http://www.tuscanyscatours.com/Payment/", wsdlLocation = "file:/C:/simon/tuscany/travelsample/contributions/payment-java/src/main/resources/Payment.wsdl")
+public class PaymentService
+ extends Service
+{
+
+ private final static URL PAYMENTSERVICE_WSDL_LOCATION;
+ private final static Logger logger = Logger.getLogger(com.tuscanyscatours.payment.PaymentService.class.getName());
+
+ static {
+ URL url = null;
+ try {
+ URL baseUrl;
+ baseUrl = com.tuscanyscatours.payment.PaymentService.class.getResource(".");
+ url = new URL(baseUrl, "file:/C:/simon/tuscany/travelsample/contributions/payment-java/src/main/resources/Payment.wsdl");
+ } catch (MalformedURLException e) {
+ logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/simon/tuscany/travelsample/contributions/payment-java/src/main/resources/Payment.wsdl', retrying as a local file");
+ logger.warning(e.getMessage());
+ }
+ PAYMENTSERVICE_WSDL_LOCATION = url;
+ }
+
+ public PaymentService(URL wsdlLocation, QName serviceName) {
+ super(wsdlLocation, serviceName);
+ }
+
+ public PaymentService() {
+ super(PAYMENTSERVICE_WSDL_LOCATION, new QName("http://www.tuscanyscatours.com/Payment/", "PaymentService"));
+ }
+
+ /**
+ *
+ * @return
+ * returns Payment
+ */
+ @WebEndpoint(name = "PaymentPort")
+ public Payment getPaymentPort() {
+ return super.getPort(new QName("http://www.tuscanyscatours.com/Payment/", "PaymentPort"), Payment.class);
+ }
+
+ /**
+ *
+ * @param features
+ * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
+ * @return
+ * returns Payment
+ */
+ @WebEndpoint(name = "PaymentPort")
+ public Payment getPaymentPort(WebServiceFeature... features) {
+ return super.getPort(new QName("http://www.tuscanyscatours.com/Payment/", "PaymentPort"), Payment.class, features);
+ }
+
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/package-info.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/package-info.java
new file mode 100644
index 0000000000..acd208f5c9
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/com/tuscanyscatours/payment/package-info.java
@@ -0,0 +1,2 @@
+@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.tuscanyscatours.com/Payment/")
+package com.tuscanyscatours.payment;
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/scatours/payment/PaymentLauncher.java b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/scatours/payment/PaymentLauncher.java
new file mode 100644
index 0000000000..41f78e4109
--- /dev/null
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/payment-java-callback/src/main/java/scatours/payment/PaymentLauncher.java
@@ -0,0 +1,73 @@
+/*
+ * 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 scatours.payment;
+
+import static scatours.launcher.LauncherUtil.locate;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+
+import com.tuscanyscatours.payment.Payment;
+
+public class PaymentLauncher {
+
+ public static void main(String[] args) throws Exception {
+ SCANode node = SCANodeFactory.newInstance().createSCANode(null,
+ locate("payment-java-callback"));
+ node.start();
+
+ SCAClient client = (SCAClient)node;
+ Payment payment1 = client.getService(Payment.class, "Payment1");
+ Payment payment2 = client.getService(Payment.class, "Payment2");
+ Payment paymentConfirm = client.getService(Payment.class, "PaymentConfirm");
+ Payment paymentCallbackID = client.getService(Payment.class, "PaymentCallbackID");
+ Payment paymentCallbackRedirect = client.getService(Payment.class, "PaymentCallbackRedirect");
+
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment1 under limit - Status = \n\n" + payment1.makePaymentMember("c-0", 100.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 under limit - Status = \n\n" + payment2.makePaymentMember("c-0", 100.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment1 over limit - Status = \n\n" + payment1.makePaymentMember("c-0", 1500.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 over limit - Status = \n\n" + payment2.makePaymentMember("c-0", 1500.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPayment2 using request context - Status = \n\n" + payment2.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentConfirm - Status = \n\n" + paymentConfirm.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+
+ // wait for longer that the asynch payment processing waits.
+ try {
+ Thread.sleep(2000);
+ } catch (Exception ex) {
+ // do nothing
+ }
+
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentCallbackID - Status = \n\n" + paymentCallbackID.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+ System.out.println("\n\nPaymentCallbackRedirect - Status = \n\n" + paymentCallbackRedirect.makePaymentMember("c-0", 20000.00f));
+ System.out.println("===================================================");
+
+ node.stop();
+ }
+}
diff --git a/sca-java-1.x/trunk/tutorials/travelsample/launchers/pom.xml b/sca-java-1.x/trunk/tutorials/travelsample/launchers/pom.xml
index 3d8738dc86..e0682ac146 100644
--- a/sca-java-1.x/trunk/tutorials/travelsample/launchers/pom.xml
+++ b/sca-java-1.x/trunk/tutorials/travelsample/launchers/pom.xml
@@ -63,6 +63,7 @@
<module>notification-jms</module>
<module>notification-rmi</module>
<module>payment-java</module>
+ <module>payment-java-callback</module>
<module>payment-java-policy</module>
<module>payment-spring</module>
<module>payment-spring-scatag</module>