Мы создали веб-сервис с использованием 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 не используется, так как сервис также должен быть доступен для других собственных приложений).
Спасибо заранее