JAX-WS с Equinox OSGi - PullRequest
       15

JAX-WS с Equinox OSGi

4 голосов
/ 04 октября 2010

Мы создали веб-сервис с использованием JAX-WS и ProSyst OSGi.Доступ к службе с помощью следующего кода прекрасно работает как в автономном приложении Java, так и в платформе ProSyst.

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.*, а другие я должен сделать их экспортированнымипо комплектации.Это можно сделать, сказав платформе ProSyst экспортировать их через свою конфигурацию, но это также можно сделать, написав пакет расширений со следующим оператором экспорта: (что мы сделали для равноденствия.)в том, что это также должно работать в 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)

У кого-нибудь есть идеи, как решить эту проблему?Или есть другая / лучшая возможность получить доступ к услуге из равноденствия?(DOSGI не используется, так как сервис также должен быть доступен для других собственных приложений).

Спасибо заранее

Ответы [ 2 ]

3 голосов
/ 19 октября 2010

Похоже, что пакет com.sun.xml.internal.ws.developer не виден.

Попробуйте 2 способа:

  • добавить этот пакет (и, возможно, не только этот) в список экспортируемых пакетов в системном комплекте (системное свойство: org.osgi.framework.system.packages).Импортируйте этот пакет (ы) явно или с заголовком Dynamic-ImportPackage
  • . Используйте системное свойство org.osgi.framework.bootdelegation, чтобы делегировать этот пакет системному загрузчику классов.

Надеюсь, он вам поможет.

0 голосов
/ 27 июля 2012

Добавление недостающих пакетов в

-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:
У меня

заголовок в манифесте сработал.

...