2010-10-04 5 views
4

Nous avons créé un service Web utilisant JAX-WS et ProSyst OSGi. L'accès au service avec le code suivant fonctionne correctement dans une application Java autonome ainsi que dans l'infrastructure ProSyst.JAX-WS avec Equinox 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 a besoin de quelques paquets de javax.* et d'autres que je dois les faire exportés par le faisceau-cadre. Cela se fait en disant le cadre ProSyst de les exporter par sa configuration, mais pourrait également être fait en écrivant un groupe d'extension avec la déclaration d'exportation suivante: (. Ce que nous avons fait pour l'équinoxe)

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 

Ma compréhension est, Cela devrait également fonctionner dans Equinox, car ils utilisent la même machine virtuelle Java. Donc, si ces bundles sont accessibles, JAX-WS devrait fonctionner dans les deux cas.

Toutefois, l'appel this.service.getMyServicePort() entraînera l'exception suivante:

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) 

Toute personne une idée de comment résoudre ce problème? Ou y at-il une autre/meilleure possibilité d'accéder au service de l'équinoxe? (DOSGI n'est pas utilisé, car le service devrait également être accessible par d'autres applications natives).

Merci est avance

+0

comment pouvez-vous résoudre votre problème? –

Répondre

3

Il semble que paquet com.sun.xml.internal.ws.developer n'est pas visible.

Essayez 2 façons:

  • Ajoutez ce pack (et peut-être non seulement celui-ci) à la liste des paquets exportés dans le faisceau de système (propriété du système: org.osgi.framework.system.packages). Importez ce ou ces paquet (s) explicitement ou avec Dynamic-ImportPackage header
  • utilisez la propriété système org.osgi.framework.bootdelegation pour déléguer ce package au classloader système.

Espérons que cela vous aide.

+0

Comment puis-je ajouter cette chose dans la propriété système? Pouvez-vous s'il vous plaît m'aider à ce sujet? –

+0

Modifiez le fichier equinox config.ini dans le dossier de configuration et ajoutez la propriété (par exemple, 'org.osgi.framework.bootdelegation = javax. *, Org.xml. *, Org.w3c. *, Org.ietf. *'). –

+0

Je n'ai pas installé équinoxe dans mon système. Avons-nous besoin d'exécuter notre plugin personnalisé dans Jira5.0 version 2? –

0

Ajout des paquets manquants dans le

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

propriété système JVM, et l'ajout de ces paquets à l'en-tête

Import-Package: 

dans le manifeste a fonctionné pour moi.

Questions connexes