2010-10-04 37 views
4

我们使用JAX-WS和ProSyst OSGi创建了一个Web服务。 使用以下代码访问服务可在独立Java应用程序 以及ProSyst框架中正常工作。带Equinox的JAX-WS OSGi

this.service = new MyServicePortService(
      new URL("http://" + host + ":" + port + "/MyService?wsdl"), 
      new QName("http://myservice.example.com/", "MyServicePortService")); 
this.client = this.service.getMyServicePort(); 

AS JAX-WS需要从javax.*一些包和其他我必须让他们由框架bundle导出。这是通过告诉ProSyst框架,他们通过其配置导出,但也可以通过编写具有以下导出语句的扩展束来完成完成:(。我们已经为春分完成)

Export-Package 
    com.sun.net.ssl.internal.ssl   
    com.sun.xml       
    com.sun.xml.internal.bind.api   
    javax.crypto       
    javax.crypto.spec      
    javax.jw        
    javax.naming       
    javax.naming.directory     
    javax.naming.event      
    javax.naming.ldap      
    javax.naming.spi      
    javax.net        
    javax.net.ssl       
    javax.security.cert     
    javax.transaction.xa     
    javax.xml.bind.util     
    javax.xml.stream      
    javax.xml.transform.stax    
    javax.xml.ws       
    org.apache.log4j      
    sun.security.action 

我的理解是,这也应该在Equinox中起作用,因为它们使用相同的JVM。因此,如果这些软件包可以访问,那么JAX-WS应该同时工作。

但是,调用this.service.getMyServicePort()将导致以下异常:

java.lang.IllegalArgumentException: interface com.sun.xml.internal.ws.developer.WSBindingProvider is not visible from class loader 
    at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) 
    at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:546) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:292) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:274) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:267) 
    at javax.xml.ws.Service.getPort(Service.java:92) 
    at com.example.myservice.MyServicePortService.MyServicePort(MyServicePortService.java:56) 
    at com.example.myservice.MyServicePort.<init>(MyServicePort.java:36) 
    at com.example.myservice.ClientActivator.activate(ClientActivator.java:78) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:230) 
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:140) 
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:330) 
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:560) 
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:182) 
    at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:393) 
    at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:176) 
    at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:791) 
    at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:758) 
    at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:90) 
    at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70) 

任何人的想法如何解决这个问题?还是有其他更好的可能性从Equinox访问服务? (不使用DOSGI,因为该服务也应该可以被其他本地应用程序访问)。

谢谢你是进步

+0

如何解决你的问题? – 2012-04-03 06:31:48

回答

3

看来,包com.sun.xml.internal.ws.developer是不可见的。

尝试2种方式:

  • 这个包(也许不是只有这一个)添加到系统捆绑出口包(系统属性:org.osgi.framework.system.packages)的列表。明确导入此软件包或使用Dynamic-ImportPackage标头
  • 使用系统属性org.osgi.framework.bootdelegation将此软件包委托给系统类加载程序。

希望它可以帮助你。

+0

如何在系统属性中添加这个东西?你能帮我解决这个问题吗? – 2012-04-03 06:29:39

+0

编辑配置文件夹中的equinox config.ini文件并添加属性(例如'org.osgi.framework.bootdelegation = javax。*,org.xml。*,org.w3c。*,org.ietf。*')。 – 2012-04-03 08:38:27

+0

我没有在我的系统中安装equinox。我们是否需要它在Jira5.0版本2中运行我们的定制插件? – 2012-04-03 09:03:19

0

添加在

-Dorg.osgi.framework.system.packages.extra=com.sun.xml.internal.ws.developer,com.sun.xml.internal.ws,com.sun.xml.internal.ws.api.message 

JVM系统属性缺少的包,并添加这些软件包到

Import-Package: 

头中的清单为我工作。

相关问题