【问题标题】:Running OSGI from within jboss invoking jax-ws service从 jboss 调用 jax-ws 服务运行 OSGI
【发布时间】:2012-04-03 14:53:26
【问题描述】:

我创建了一些在 Felix 中运行的 OSGI 包,没有任何问题。我有一个调用 jaxws 服务的包。 osgi 包的所有存根都是使用 cxf-codegen-plugin 生成的。如果我直接启动 felix 并执行我的应用程序,一切正常。

我最近将它转移到让所有东西都在 jboss 应用服务器 (JBoss 5.1.0.GA) 中运行。我正在使用servlet-bridge,并在我的 servlet 注册时启动 felix。一切都启动了 find,我所有的包都没有错误地启动。但是,当我执行我的应用程序时,出现以下错误:

22:23:40,688 ERROR [[proxy]] Servlet.service() for servlet proxy threw exception
javassist.NotFoundException: com.service.ws.Parameters
at javassist.ClassPool.get(ClassPool.java:436)
at org.jboss.ws.core.jaxws.DynamicWrapperGenerator.addProperty(DynamicWrapperGenerator.java:226)
at org.jboss.ws.core.jaxws.DynamicWrapperGenerator.generate(DynamicWrapperGenerator.java:122)
at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.processWebMethod(JAXWSMetaDataBuilder.java:796)
at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.processWebMethods(JAXWSMetaDataBuilder.java:920)
at org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder.rebuildEndpointMetaData(JAXWSClientMetaDataBuilder.java:298)
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPortInternal(ServiceDelegateImpl.java:269)
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPort(ServiceDelegateImpl.java:200)
at javax.xml.ws.Service.getPort(Service.java:99)
at com.service.ws.JasperService_Service.getJasperServicePort(JasperService_Service.java:46)
at com.service.ws.JasperReportImpl.initializeServer(JasperReportImpl.java:56)
at com.web.ui.ReportWindow.handleParameters(ReportWindow.java:122)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:528)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:96)
at org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:79)
at org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:42)
at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:49)
at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33)
at org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48)
at org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39)
at org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.felix.http.proxy.ProxyServlet.service(ProxyServlet.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)

我不确定为什么 javassist 类无法找到该类。它是调用 getPort 的同一个包的一部分,当直接从 felix 运行时,所有这些都可以正常工作。

*更新 如果我将包含正在查找的类的 jar(bundle) 放在 jboss lib 目录中,我可以克服这个初始错误,从而将它放在全局类路径中。但是,一旦我克服了最初的解决错误,我就会得到另一个错误,如下所示:

22:05:10,823 ERROR [ServiceDelegateImpl] Cannot create proxy for SEI com.service.ws.JasperService from: file:/home/work/appservers/osgi/bundle/com.jasper-server-ws-client-1.0-SNAPSHOT.jar
22:05:10,824 ERROR [[proxy]] Servlet.service() for servlet proxy threw exception
java.lang.IllegalArgumentException: interface com.service.ws.JasperService 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 org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.createProxy(ServiceDelegateImpl.java:400)
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPortInternal(ServiceDelegateImpl.java:273)
at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPort(ServiceDelegateImpl.java:200)
at javax.xml.ws.Service.getPort(Service.java:99)

所以类路径出了点问题。我不知道为什么,但似乎我的包的类路径在某些方面可能不正确,但我不确定在哪里。

【问题讨论】:

    标签: jboss osgi apache-felix


    【解决方案1】:

    您在第一次更新中提出的当前问题是Java reflection 之一。

    这里的秘诀是更新您的MANIFEST.MF 文件以将com.service.ws.JasperService 公开给类加载器。关注this guide,您可以尝试以下操作:

    Export-Package: com.service.ws.JasperService

    祝你的项目好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      相关资源
      最近更新 更多