4

JAX-WSとProSystOSGiを使用してWebサービスを作成しました。次のコードを使用してサービスにアクセスすると、スタンドアロンの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に対して行ったこと)。

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

私の理解では、同じJVMを使用しているため、これはEquinoxでも機能するはずです。したがって、これらのバンドルにアクセスできる場合、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は使用されません)。

よろしくお願いします

4

2 に答える 2

3

パッケージcom.sun.xml.internal.ws.developerが見えないようです。

2つの方法を試してください:

  • このパッケージ(およびおそらくこれだけではない)をシステムバンドル内のエクスポートされたパッケージのリストに追加します(システムプロパティ:) org.osgi.framework.system.packages。このパッケージを明示的に、またはDynamic-ImportPackageヘッダー付きでインポートします
  • システムプロパティorg.osgi.framework.bootdelegationを使用して、このパッケージをシステムクラスローダーに委任します。

お役に立てば幸いです。

于 2010-10-19T08:37:51.290 に答える
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:

マニフェストのヘッダーは私のために働いた。

于 2012-07-27T09:01:51.627 に答える