From bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a Mon Sep 17 00:00:00 2001 From: dims Date: Tue, 17 Jun 2008 00:23:01 +0000 Subject: Move Tuscany from Incubator to top level. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/catalog/CatalogClient.java | 37 ++++++ .../src/main/java/catalog/CatalogService.java | 28 +++++ .../java/catalog/amazon/AmazonCatalogService.java | 31 +++++ .../catalog/amazon/AmazonCatalogServiceImpl.java | 94 +++++++++++++++ .../main/java/catalog/ebay/EBayCatalogService.java | 32 ++++++ .../java/catalog/ebay/EBayCatalogServiceImpl.java | 99 ++++++++++++++++ .../java/catalog/util/NamespaceContextImpl.java | 126 +++++++++++++++++++++ .../src/main/java/catalog/util/XPathHelper.java | 55 +++++++++ 8 files changed, 502 insertions(+) create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogClient.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogService.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogService.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogServiceImpl.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogService.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogServiceImpl.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/NamespaceContextImpl.java create mode 100644 sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/XPathHelper.java (limited to 'sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java') diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogClient.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogClient.java new file mode 100644 index 0000000000..de67e597ac --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogClient.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 catalog; + +import org.apache.tuscany.sca.host.embedded.SCADomain; + +/** + * This client program to invoke the Mortgage LoanApproval service + */ +public class CatalogClient { + + public static void main(String[] args) throws Exception { + System.err.println("Please make sure you have the ids configured in catalog.composite"); + SCADomain domain = SCADomain.newInstance("catalog.composite"); + CatalogService ebay = domain.getService(CatalogService.class, "EBayCatalogService"); + ebay.get(); + CatalogService amazon = domain.getService(CatalogService.class, "AmazonCatalogService"); + amazon.get(); + + } +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogService.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogService.java new file mode 100644 index 0000000000..c5db53621c --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/CatalogService.java @@ -0,0 +1,28 @@ +/* + * 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 catalog; + + +/** + * @version $Rev$ $Date$ + */ +public interface CatalogService { + String[] get(); +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogService.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogService.java new file mode 100644 index 0000000000..ce66396582 --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogService.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 catalog.amazon; + +import org.apache.tuscany.sca.databinding.annotation.DataBinding; +import org.osoa.sca.annotations.Remotable; +import org.w3c.dom.Node; + +@Remotable +@DataBinding(value="org.w3c.dom.Node", wrapped=true) +public interface AmazonCatalogService { + Node ItemSearch(Node requestWrapper); + +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogServiceImpl.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogServiceImpl.java new file mode 100644 index 0000000000..2c56a37601 --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/amazon/AmazonCatalogServiceImpl.java @@ -0,0 +1,94 @@ +/* + * 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 catalog.amazon; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.tuscany.sca.databinding.impl.DOMHelper; +import org.osoa.sca.annotations.Property; +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Service; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import catalog.CatalogService; +import catalog.util.XPathHelper; + +/** + * @version $Rev$ $Date$ + */ +@Service(CatalogService.class) +public class AmazonCatalogServiceImpl implements CatalogService { + private static final String AMAZON_TNS = "http://webservices.amazon.com/AWSECommerceService/2007-09-21"; + + @Reference(name = "amazonFindItems") + protected AmazonCatalogService itemSearch; + + @Property(name="AWSAccessKeyId", required=true) + protected String accessKeyId; + + private Node amazonItemSearch(String keywords) throws Exception { + Document doc = DOMHelper.newDocument(); + Element wrapper = doc.createElementNS(AMAZON_TNS, "ItemSearch"); + doc.appendChild(wrapper); + Element key = doc.createElementNS(AMAZON_TNS, "AWSAccessKeyId"); + key.appendChild(doc.createTextNode(accessKeyId)); + wrapper.appendChild(key); + + Element request = doc.createElementNS(AMAZON_TNS, "Request"); + wrapper.appendChild(request); + + Element keywordsElement = doc.createElementNS(AMAZON_TNS, "Keywords"); + keywordsElement.appendChild(doc.createTextNode(keywords)); + request.appendChild(keywordsElement); + + Element searchIndex = doc.createElementNS(AMAZON_TNS, "SearchIndex"); + searchIndex.appendChild(doc.createTextNode("All")); + request.appendChild(searchIndex); + + // System.out.println(new Node2String().transform(doc, null)); + Node result = itemSearch.ItemSearch(doc); + return result; + } + + public String[] get() { + try { + Node list = amazonItemSearch("Fruit"); + Map map = new HashMap(); + map.put("a", AMAZON_TNS); + NodeList nodes = + XPathHelper.selectNodes("//a:Item/a:ItemAttributes[a:ProductGroup='Grocery']/a:Title", list, map); + String titles[] = new String[nodes.getLength()]; + System.out.println("Amazon catalog:"); + for (int i = 0; i < nodes.getLength(); i++) { + titles[i] = nodes.item(i).getTextContent(); + System.out.println("[" + i + "]" + titles[i]); + } + + return titles; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogService.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogService.java new file mode 100644 index 0000000000..5aeaabdbf3 --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogService.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package catalog.ebay; + +import org.osoa.sca.annotations.Remotable; +import org.w3c.dom.Node; + +/** + * @version $Rev$ $Date$ + */ +@Remotable +public interface EBayCatalogService { + Node FindItems(Node request); + Node GetUserProfile(Node request); +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogServiceImpl.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogServiceImpl.java new file mode 100644 index 0000000000..dc69816c27 --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/ebay/EBayCatalogServiceImpl.java @@ -0,0 +1,99 @@ +/* + * 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 catalog.ebay; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.tuscany.sca.databinding.impl.DOMHelper; +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Service; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import catalog.CatalogService; +import catalog.util.XPathHelper; + +/** + * @version $Rev$ $Date$ + */ +@Service(CatalogService.class) +public class EBayCatalogServiceImpl implements CatalogService { + private static final String EBAY_TNS = "urn:ebay:apis:eBLBaseComponents"; + + @Reference(name = "eBayFindItems") + protected EBayCatalogService findItems; + + @Reference(name = "eBayGetUserProfile") + protected EBayCatalogService getUserProfile; + + private Node eBayFindItems(String keywords, int maxEntries) throws Exception { + Document doc = DOMHelper.newDocument(); + Element request = doc.createElementNS(EBAY_TNS, "FindItemsRequest"); + doc.appendChild(request); + Element keywordsElement = doc.createElementNS(EBAY_TNS, "QueryKeywords"); + keywordsElement.appendChild(doc.createTextNode(keywords)); + Element maxEntriesElement = doc.createElementNS(EBAY_TNS, "MaxEntries"); + maxEntriesElement.appendChild(doc.createTextNode(String.valueOf(maxEntries))); + Element messageIDElement = doc.createElementNS(EBAY_TNS, "MessageID"); + messageIDElement.appendChild(doc.createTextNode("001")); + request.appendChild(maxEntriesElement); + request.appendChild(keywordsElement); + request.appendChild(messageIDElement); + // System.out.println(new Node2String().transform(doc, null)); + Node result = findItems.FindItems(doc); + return result; + } + + private Node eBayGetUserProfile(String userID) throws Exception { + Document doc = DOMHelper.newDocument(); + Element req = doc.createElementNS(EBAY_TNS, "GetUserProfileRequest"); + doc.appendChild(req); + Element user = doc.createElementNS(EBAY_TNS, "UserID"); + user.appendChild(doc.createTextNode(userID)); + Element msgID = doc.createElementNS(EBAY_TNS, "MessageID"); + msgID.appendChild(doc.createTextNode("001")); + req.appendChild(user); + // System.out.println(new Node2String().transform(doc, null)); + Node result = getUserProfile.GetUserProfile(doc); + return result; + } + + public String[] get() { + try { + Node items = eBayFindItems("Fruit", 10); + Map map = new HashMap(); + map.put("e", EBAY_TNS); + NodeList nodes = XPathHelper.selectNodes("//e:Item/e:Title", items, map); + String[] titles = new String[nodes.getLength()]; + System.out.println("eBay catalog:"); + for (int i = 0; i < nodes.getLength(); i++) { + titles[i] = nodes.item(i).getTextContent(); + System.out.println("[" + i + "]" + titles[i]); + } + return titles; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/NamespaceContextImpl.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/NamespaceContextImpl.java new file mode 100644 index 0000000000..dcd14f5530 --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/NamespaceContextImpl.java @@ -0,0 +1,126 @@ +/* + * 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 catalog.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.xml.namespace.NamespaceContext; + +public class NamespaceContextImpl implements NamespaceContext { + private NamespaceContext parent; + private Map map = new HashMap(); + + /** + * @param parent + */ + public NamespaceContextImpl(NamespaceContext parent, Map map) { + super(); + this.parent = parent; + if (parent == null) { + this.map.put("xml", "http://www.w3.org/XML/1998/namespace"); + this.map.put("xmlns", "http://www.w3.org/2000/xmlns/"); + } + if (map != null) { + this.map.putAll(map); + } + } + + public String getNamespaceURI(String prefix) { + if (prefix == null) { + throw new IllegalArgumentException("Prefix is null"); + } + + String ns = (String)map.get(prefix); + if (ns != null) { + return ns; + } + if (parent != null) { + return parent.getNamespaceURI(prefix); + } + return null; + } + + public String getPrefix(String nsURI) { + if (nsURI == null) + throw new IllegalArgumentException("Namespace is null"); + for (Iterator> i = map.entrySet().iterator(); i.hasNext();) { + Map.Entry entry = i.next(); + if (entry.getValue().equals(nsURI)) { + return entry.getKey(); + } + } + if (parent != null) { + return parent.getPrefix(nsURI); + } + return null; + } + + public Iterator getPrefixes(String nsURI) { + List prefixList = new ArrayList(); + for (Iterator> i = map.entrySet().iterator(); i.hasNext();) { + Map.Entry entry = i.next(); + if (entry.getValue().equals(nsURI)) { + prefixList.add(entry.getKey()); + } + } + final Iterator currentIterator = prefixList.iterator(); + final Iterator parentIterator = parent != null ? null : parent.getPrefixes(nsURI); + return new Iterator() { + + public boolean hasNext() { + return currentIterator.hasNext() || (parentIterator != null && parentIterator.hasNext()); + } + + public Object next() { + if (!hasNext()) { + throw new IllegalStateException("End of iterator has reached"); + } + return currentIterator.hasNext() ? currentIterator.next() : parentIterator.next(); + } + + public void remove() { + throw new UnsupportedOperationException(); + } + + }; + + } + + public void register(String prefix, String ns) { + map.put(prefix, ns); + } + + public NamespaceContext getParent() { + return parent; + } + + public String toString() { + StringBuffer sb = new StringBuffer(map.toString()); + if (parent != null) { + sb.append("\nParent: "); + sb.append(parent); + } + return sb.toString(); + } +} diff --git a/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/XPathHelper.java b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/XPathHelper.java new file mode 100644 index 0000000000..850ba7d8ae --- /dev/null +++ b/sandbox/sebastien/java/sca-node/tutorial/www-services/catalog-amazon/src/main/java/catalog/util/XPathHelper.java @@ -0,0 +1,55 @@ +/* + * 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 catalog.util; + +import java.util.Map; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * @version $Rev$ $Date$ + */ +public class XPathHelper { + + public static Node selectNode(String xpath, Node root, Map namespaces) + throws XPathExpressionException { + XPath path = XPathFactory.newInstance().newXPath(); + NamespaceContextImpl context = new NamespaceContextImpl(null, namespaces); + path.setNamespaceContext(context); + XPathExpression exp = path.compile(xpath); + return (Node)exp.evaluate(root, XPathConstants.NODE); + } + + public static NodeList selectNodes(String xpath, Node root, Map namespaces) + throws XPathExpressionException { + XPath path = XPathFactory.newInstance().newXPath(); + NamespaceContextImpl context = new NamespaceContextImpl(null, namespaces); + path.setNamespaceContext(context); + XPathExpression exp = path.compile(xpath); + return (NodeList)exp.evaluate(root, XPathConstants.NODESET); + } +} -- cgit v1.2.3