我正在尝试学习如何使用Tuscany和OSGi包进行开发,以用作SCA组件的实现。我在eclipse IDE上使用java。我试图搜索在线教程开始,但我没有得到任何人。
我在这里找到了一个链接http://tuscany.apache.org/sca-java-implementationosgi.html 这有助于一般的想法,但它没有提供细节。我决定尝试没有教程,我做了一些事情,但它没有用,我得到了错误。
所以这就是我的所作所为: 我创建了一个包含以下界面的包:
package com.javaworld.sample.service;
import org.osoa.sca.annotations.Remotable;
@Remotable
public interface HelloService {
public String sayHello();
}
界面的实现工作正常,我在没有Tuscany的情况下单独检查了这个项目。
现在,这是此捆绑包的MANIFEST文件:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloService
Bundle-SymbolicName: com.javaworld.sample.HelloService
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.javaworld.sample.service.impl.HelloServiceActivator
Bundle-Vendor: JAVAWORLD
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.3.0"
Export-Package: com.javaworld.sample.service
在一个单独的项目中,我有几个组件构建为SCA,这是我的复合文件,名为store.composite,
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
xmlns:s="http://store"
targetNamespace="http://store"
name="store">
<component name="store">
<t:implementation.widget location="ufservices/store.html" />
<service name="Widget">
<t:binding.http uri="http://localhost:8080/store" />
</service>
<reference name="catalog" target="Catalog">
<t:binding.jsonrpc />
</reference>
<reference name="shoppingCart" target="ShoppingCart/Cart">
<t:binding.atom />
</reference>
<reference name="shoppingTotal" target="ShoppingCart/Total">
<t:binding.jsonrpc />
</reference>
<reference name="hellowService" target="HelloWorldService">
<t:binding.jsonrpc />
</reference>
</component>
<component name="Catalog">
<implementation.java class="services.CatalogImpl" />
<property name="currencyCode">USD</property>
<service name="Catalog">
<t:binding.jsonrpc uri="http://localhost:8080/Catalog"/>
</service>
<reference name="currencyConverter" target="CurrencyConverter" />
</component>
<component name="ShoppingCart">
<implementation.java class="services.ShoppingCartImpl" />
<service name="Cart">
<t:binding.atom uri="http://localhost:8080/ShoppingCart/Cart" />
</service>
<service name="Total">
<t:binding.jsonrpc uri="http://localhost:8080/Total"/>
</service>
</component>
<component name="CurrencyConverter">
<implementation.java class="services.CurrencyConverterImpl" />
</component>
<component name="HelloWorldService">
<implementation.osgi xmlns=http://tuscany.apache.org/xmlns/sca/1.0
bundleSymbolicName="com.javaworld.sample.HelloService"
bundleVersion="1.0.0.qualifier">
</implementation.osgi>
</component>
</composite>
你可以在这个文件的末尾看到我创建了一个引用HelloWorldService包的osgi实现的组件。
以下是我的商店组件的一部分,它是一个html文件:
<html>
<head>
<title>Store</title>
<script type="text/javascript" src="store.js"></script>
<script language="JavaScript">
//@Reference
var hellowService= new tuscany.sca.Reference("hellowService");
function displayHellowService()
{
var h= hellowService.sayHello();
alert(h);
}
</script>
</head>
<body>
<h1>Store</h1>
<div id="store">
<form name="shoppingCartForm">
<input type="button" id="button1" onclick="displayHellowService()"/>
</form>
</div>
</body>
</html>
我还有一个启动java文件,它包含main方法并创建整个东西。 最后,下面是我运行项目时遇到的错误。
SEVERE: ContributionReadException occured due to : org.xml.sax.SAXParseException; lineNumber: 51; columnNumber: 36; Open quote is expected for attribute "xmlns" associated with an element type "implementation.osgi".
يول 14, 2013 1:37:52 ص org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor
SEVERE: ContributionReadException occured due to : com.ctc.wstx.exc.WstxIOException: Stream closed
Exception in thread "main" org.osoa.sca.ServiceRuntimeException: org.apache.tuscany.sca.contribution.service.ContributionException: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
at org.apache.tuscany.sca.node.impl.NodeImpl.<init>(NodeImpl.java:204)
at org.apache.tuscany.sca.node.impl.NodeFactoryImpl.createSCANodeFromClassLoader(NodeFactoryImpl.java:37)
at org.apache.tuscany.sca.host.embedded.impl.DefaultSCADomain.init(DefaultSCADomain.java:178)
at org.apache.tuscany.sca.host.embedded.impl.DefaultSCADomain.<init>(DefaultSCADomain.java:100)
at org.apache.tuscany.sca.host.embedded.SCADomain.createNewInstance(SCADomain.java:182)
at org.apache.tuscany.sca.host.embedded.SCADomain.newInstance(SCADomain.java:63)
at launch.Launch.main(Launch.java:8)
Caused by: org.apache.tuscany.sca.contribution.service.ContributionException: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:421)
at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.contribute(ContributionServiceImpl.java:198)
at org.apache.tuscany.sca.node.impl.NodeImpl.configureNode(NodeImpl.java:524)
at org.apache.tuscany.sca.node.impl.NodeImpl.<init>(NodeImpl.java:200)
... 6 more
Caused by: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:214)
at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:137)
at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:59)
at org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor.read(ExtensibleURLArtifactProcessor.java:96)
at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.processReadPhase(ContributionServiceImpl.java:587)
at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:419)
... 9 more
Caused by: com.ctc.wstx.exc.WstxIOException: Stream closed
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:548)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:604)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:619)
at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:317)
at org.apache.tuscany.sca.contribution.processor.DefaultValidatingXMLInputFactory.createXMLStreamReader(DefaultValidatingXMLInputFactory.java:226)
at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:181)
... 14 more
Caused by: java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at com.ctc.wstx.io.StreamBootstrapper.ensureLoaded(StreamBootstrapper.java:443)
at com.ctc.wstx.io.StreamBootstrapper.resolveStreamEncoding(StreamBootstrapper.java:267)
at com.ctc.wstx.io.StreamBootstrapper.bootstrapInput(StreamBootstrapper.java:131)
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:543)
... 19 more
有人可以给我指导教程或帮助我解决问题。感谢。
答案 0 :(得分:2)
这里有XML语法错误:
<component name="HelloWorldService">
<implementation.osgi xmlns=http://tuscany.apache.org/xmlns/sca/1.0
bundleSymbolicName="com.javaworld.sample.HelloService"
bundleVersion="1.0.0.qualifier">
</implementation.osgi>
</component>
我无法帮助你,但SEVERE:ContributionReadException由于:org.xml.sax.SAXParseException而发生; lineNumber:51; columnNumber:36;对于与元素类型“implementation.osgi”相关联的属性“xmlns”,需要打开引号。
只是XML解析问题。您可以通过'SAXParseException'来判断,SAX是XML的简单API。
答案 1 :(得分:0)
问题是因为您声明了没有引号的XML命名空间,请将其更改为:
<implementation.osgi xmlns="http://tuscany.apache.org/xmlns/sca/1.0" />
请注意,命名空间附有引号(“”)
此外,让我指出本教程。即使它适用于Rational Application Developer,代码也可以正常工作
希望这有帮助。