diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-03-24 18:51:23 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-03-24 18:51:23 +0000 |
commit | 76a651e92a54408ef02779cee1aff057e9d89c2c (patch) | |
tree | c8ffc3d7040ab7947d3207b7dc3eec690998c221 /java/sca | |
parent | 48e4adb6cc908419f0d89fb3b527c14a8a162312 (diff) |
Add coding to parse RFC-119 service-descriptions file
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@757952 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca')
10 files changed, 167 insertions, 15 deletions
diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiImplementationProcessor.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiImplementationProcessor.java index 57d360ca29..6181e92118 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiImplementationProcessor.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/OSGiImplementationProcessor.java @@ -45,6 +45,8 @@ import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.FactoryExtensionPoint; import org.apache.tuscany.sca.implementation.osgi.OSGiImplementation; import org.apache.tuscany.sca.implementation.osgi.OSGiImplementationFactory; +import org.apache.tuscany.sca.implementation.osgi.ServiceDescription; +import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions; import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptionsFactory; import org.apache.tuscany.sca.interfacedef.Interface; import org.apache.tuscany.sca.interfacedef.java.JavaInterface; @@ -176,6 +178,11 @@ public class OSGiImplementationProcessor implements StAXArtifactProcessor<OSGiIm mergeFromComponentType(impl, componentType, resolver); } + ServiceDescriptions descriptions = serviceDescriptionsFactory.createServiceDescriptions(); + descriptions = resolver.resolveModel(ServiceDescriptions.class, descriptions); + for(ServiceDescription ds: descriptions) { + System.out.println(ds); + } // FIXME: How to find the RFC 119 service descriptions in the contribution and // derive the SCA component type from them? } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsDocumentProcessor.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsDocumentProcessor.java index d2d433d6c2..b692531a38 100644 --- a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsDocumentProcessor.java +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsDocumentProcessor.java @@ -50,7 +50,7 @@ public class ServiceDescriptionsDocumentProcessor implements URLArtifactProcesso StAXArtifactProcessor staxProcessor, Monitor monitor) { super(); - this.extensionProcessor = extensionProcessor; + this.extensionProcessor = staxProcessor; this.inputFactory = modelFactories.getFactory(ValidatingXMLInputFactory.class); } diff --git a/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsModelResolver.java b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsModelResolver.java new file mode 100644 index 0000000000..deafe8ccc9 --- /dev/null +++ b/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/xml/ServiceDescriptionsModelResolver.java @@ -0,0 +1,58 @@ +/* + * 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 org.apache.tuscany.sca.implementation.osgi.xml; + +import org.apache.tuscany.sca.contribution.Contribution; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; +import org.apache.tuscany.sca.core.FactoryExtensionPoint; +import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions; +import org.apache.tuscany.sca.implementation.osgi.ServiceDescriptionsFactory; + +/** + * + */ +public class ServiceDescriptionsModelResolver implements ModelResolver { + private ServiceDescriptions serviceDescriptions; + + public ServiceDescriptionsModelResolver(Contribution contribution, FactoryExtensionPoint modelFactories) { + ServiceDescriptionsFactory factory = modelFactories.getFactory(ServiceDescriptionsFactory.class); + this.serviceDescriptions = factory.createServiceDescriptions(); + } + + public void addModel(Object resolved) { + // Merge the service descriptions + if (resolved instanceof ServiceDescriptions) { + serviceDescriptions.addAll((ServiceDescriptions)resolved); + } + } + + public Object removeModel(Object resolved) { + // Remove the service descriptions + if (resolved instanceof ServiceDescriptions) { + serviceDescriptions.removeAll((ServiceDescriptions)resolved); + } + return resolved; + } + + public <T> T resolveModel(Class<T> modelClass, T unresolved) { + // Always return the aggregated service descriptions + return modelClass.cast(serviceDescriptions); + } +} diff --git a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor index c9ee094d9b..6407305a77 100644 --- a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor +++ b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor @@ -17,5 +17,5 @@ # Implementation class for the artifact processor extension org.apache.tuscany.sca.implementation.osgi.xml.OSGiImplementationProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#implementation.osgi,model=org.apache.tuscany.sca.implementation.osgi.OSGiImplementation -org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsProcessor;qname=http://www.osgi.org/xmlns/sd/v1.0.0#service-descriptions;model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions +org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsProcessor;qname=http://www.osgi.org/xmlns/sd/v1.0.0#service-descriptions,model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions org.apache.tuscany.sca.implementation.osgi.xml.OSGiPropertyProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#osgi.property,model=org.apache.tuscany.sca.implementation.osgi.OSGiProperty diff --git a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor index 974dd4588d..d4b5dd8dce 100644 --- a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor +++ b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor @@ -16,4 +16,4 @@ # under the License. # Implementation class for the artifact processor extension -org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsDocumentProcessor;type=/OSGI-INF/remote-service/remote-services.xml,model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions +org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsDocumentProcessor;type=/OSGI-INF/remote-service/*.xml,model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions diff --git a/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver new file mode 100644 index 0000000000..57bf18d9ce --- /dev/null +++ b/java/sca/modules/implementation-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver @@ -0,0 +1,17 @@ +# 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. +org.apache.tuscany.sca.implementation.osgi.xml.ServiceDescriptionsModelResolver;model=org.apache.tuscany.sca.implementation.osgi.ServiceDescriptions diff --git a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java index dbb45dedb4..bda8b0bdbb 100644 --- a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java +++ b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiNodeTestCase.java @@ -84,7 +84,8 @@ public class CalculatorOSGiNodeTestCase { bundles.add(OSGiTestBundles.createBundle("target/test-classes/calculator-bundle.jar", "calculator/dosgi/META-INF/MANIFEST.MF", new String[][] { - {"OSGI-INF/calculator-component.xml", null}, + {"OSGI-INF/remote-service/calculator-service-descriptions.xml"}, + {"OSGI-INF/calculator-component.xml"}, {"calculator/dosgi/bundle.componentType", "OSGI-INF/sca/bundle.componentType"}, {"calculator/dosgi/calculator.composite", @@ -106,10 +107,10 @@ public class CalculatorOSGiNodeTestCase { .createBundle("target/test-classes/operations-bundle.jar", "calculator/dosgi/operations/META-INF/MANIFEST.MF", new String[][] { - {"OSGI-INF/add-component.xml", null}, - {"OSGI-INF/subtract-component.xml", null}, - {"OSGI-INF/multiply-component.xml", null}, - {"OSGI-INF/divide-component.xml", null}, + {"OSGI-INF/add-component.xml"}, + {"OSGI-INF/subtract-component.xml"}, + {"OSGI-INF/multiply-component.xml"}, + {"OSGI-INF/divide-component.xml"}, {"calculator/dosgi/operations/bundle.componentType", "OSGI-INF/sca/bundle.componentType"}, {"calculator/dosgi/operations/operations.composite", diff --git a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java index 6ff261d01f..18d762638d 100644 --- a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java +++ b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/CalculatorOSGiTestCase.java @@ -64,7 +64,7 @@ public class CalculatorOSGiTestCase { bundles.add(OSGiTestBundles.createBundle("target/test-classes/calculator-bundle.jar", "calculator/dosgi/META-INF/MANIFEST.MF", new String[][] { - {"OSGI-INF/calculator-component.xml", null}, + {"OSGI-INF/calculator-component.xml"}, {"calculator/dosgi/bundle.componentType", "OSGI-INF/sca/bundle.componentType"}, {"calculator/dosgi/calculator.composite", @@ -77,10 +77,10 @@ public class CalculatorOSGiTestCase { bundles.add(OSGiTestBundles.createBundle("target/test-classes/operations-bundle.jar", "calculator/dosgi/operations/META-INF/MANIFEST.MF", new String[][] { - {"OSGI-INF/add-component.xml", null}, - {"OSGI-INF/subtract-component.xml", null}, - {"OSGI-INF/multiply-component.xml", null}, - {"OSGI-INF/divide-component.xml", null}, + {"OSGI-INF/add-component.xml"}, + {"OSGI-INF/subtract-component.xml"}, + {"OSGI-INF/multiply-component.xml"}, + {"OSGI-INF/divide-component.xml"}, {"calculator/dosgi/operations/bundle.componentType", "OSGI-INF/sca/bundle.componentType"}, {"calculator/dosgi/operations/operations.composite", @@ -113,7 +113,7 @@ public class CalculatorOSGiTestCase { System.out.println(string(b, false)); } } - + // Sleep for 1 sec so that the DS is available Thread.sleep(1000); // Use the DS version diff --git a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java index 1a7b961271..6898ce30f9 100644 --- a/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java +++ b/java/sca/modules/node-impl-osgi/src/test/java/calculator/dosgi/test/OSGiTestBundles.java @@ -64,7 +64,11 @@ public class OSGiTestBundles { if (resources != null) { for (String resource[] : resources) { - addResource(jarOut, OSGiTestBundles.class.getClassLoader(), resource[0], resource[1]); + if (resource.length >= 1) { + String r1 = resource[0]; + String r2 = resource.length > 1 ? resource[1] : r1; + addResource(jarOut, OSGiTestBundles.class.getClassLoader(), r1, r2); + } } } diff --git a/java/sca/modules/node-impl-osgi/src/test/resources/OSGI-INF/remote-service/calculator-service-descriptions.xml b/java/sca/modules/node-impl-osgi/src/test/resources/OSGI-INF/remote-service/calculator-service-descriptions.xml new file mode 100644 index 0000000000..25e96fe490 --- /dev/null +++ b/java/sca/modules/node-impl-osgi/src/test/resources/OSGI-INF/remote-service/calculator-service-descriptions.xml @@ -0,0 +1,65 @@ +<?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. +--> +<service-descriptions xmlns="http://www.osgi.org/xmlns/sd/v1.0.0" xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200903"> + <service-description> + <provide interface="calculator.operations.AddService" /> + <property name="service.intents">sca:SOAP sca:HTTP</property> + <property name="osgi.remote.configuration.type">sca</property> + <property name="osgi.remote.configuration.sca.componentType"> + OSGI-INF/sca/bundle.componentType + </property> + <property name="osgi.remote.configuration.sca.reference"> + addService + </property> + </service-description> + <service-description> + <provide interface="calculator.operations.SubtractService" /> + <property name="service.intents">sca:SOAP sca:HTTP</property> + <property name="osgi.remote.configuration.type">sca</property> + <property name="osgi.remote.configuration.sca.componentType"> + OSGI-INF/sca/bundle.componentType + </property> + <property name="osgi.remote.configuration.sca.reference"> + subtractService + </property> + </service-description> + <service-description> + <provide interface="calculator.operations.MultiplyService" /> + <property name="service.intents">sca:SOAP sca:HTTP</property> + <property name="osgi.remote.configuration.type">sca</property> + <property name="osgi.remote.configuration.sca.componentType"> + OSGI-INF/sca/bundle.componentType + </property> + <property name="osgi.remote.configuration.sca.reference"> + multiplyService + </property> + </service-description> + <service-description> + <provide interface="calculator.operations.DivideService" /> + <property name="service.intents">sca:SOAP sca:HTTP</property> + <property name="osgi.remote.configuration.type">sca</property> + <property name="osgi.remote.configuration.sca.componentType"> + OSGI-INF/sca/bundle.componentType + </property> + <property name="osgi.remote.configuration.sca.reference"> + divideService + </property> + </service-description> +</service-descriptions> |