出于某种原因,Web Service的调用在我的本地Weblogic 12c安装上抛出了NullPointerException。同一个包在 Weblogic 12c 的另一个实例上正常工作,因此我的 weblogic 配置或服务器/java 启动参数一定有问题。但是,我无法弄清楚有什么区别,服务器日志消息根本没有帮助。当然,我们也使用相同的 JRE 和类路径库。
这是例外
####<8.8.2017, 2:10:53,106 ip. EEST> <Error> <com.sun.xml.ws.server.sei.TieHandler> <IT-V-R90HKRNH> <is-mansrv> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <HekoPassi> <> <46eb29b8-cb8a-44a9-94ed-e223acc07388-0000005d> <1502190653106> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-000000> <null
java.lang.NullPointerException
at weblogic.ejb.container.internal.BaseWSLocalObject.__WL_preInvoke(BaseWSLocalObject.java:85)
at com.foo.bar.service.sessionfacade.SessionFacadeBean_afdkf0_WSOImpl.__WL_getPublicKey_WS_preInvoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at weblogic.wsee.server.ejb.WsEjb.preInvoke(WsEjb.java:50)
at weblogic.wsee.jaxws.WLSEjbInstanceResolver$WLSEjbInvoker.invoke(WLSEjbInstanceResolver.java:193)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:93)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:419)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:868)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:422)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:169)
at weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:229)
at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:667)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:368)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:163)
at weblogic.wsee.util.ServerSecurityHelper.authenticatedInvoke(ServerSecurityHelper.java:108)
at weblogic.wsee.jaxws.HttpServletAdapter$3.run(HttpServletAdapter.java:286)
at weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:295)
at weblogic.wsee.jaxws.JAXWSServlet.doRequest(JAXWSServlet.java:128)
at weblogic.servlet.http.AbstractAsyncServlet.service(AbstractAsyncServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3679)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3649)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259)
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
任何可能导致此异常(或我如何调试它(的想法似乎都是在控件进入实现类之前从 weblogic 生成的动态代理中抛出的(。我可以让异常更详细吗?这可能是一个安全问题吗?但话又说回来,堆栈跟踪中没有任何内容表明这一点。此外,部署日志中没有异常。
希望这有帮助:
(来自MOSC(My Oracle Support Community( java.lang.NullPointerException: com.sun.xml.ws.spi.db.JAXBWrapperAccessor.getPropertyAccessor When Deployment WebService (Doc ID 2207272.1((
APPLIES TO:
Oracle WebLogic Server - 版本 12.1.1.0 至 12.2.1.2.0 [版本 12c] 本文档中的信息适用于任何平台。
SYMPTOMS
尝试使用以下方法部署 Web 服务应用程序时 示例代码片段,
@WebService
public interface HelloServiceInterface {
@WebMethod
@RequestWrapper(className = "hello.HelloRequest")
public String hello(@WebParam(name = "names") List<String> names);
发生以下错误:
java.lang.NullPointerException: at com.sun.xml.ws.spi.db.JAXBWrapperAccessor.getPropertyAccessor(JAXBWrapperAccessor.java:261( 在 com.sun.xml.ws.db.toplink.JAXBContextWrapper.getElementPropertyAccessor(JAXBContextWrapper.java:170( 在 com.sun.xml.ws.server.sei.EndpointArgumentsBuilder$DocLit.(端点参数生成器.java:598( 在 com.sun.xml.ws.server.sei.TieHandler.createArgumentsBuilder(TieHandler.java:143( at com.sun.xml.ws.server.sei.TieHandler.(TieHandler.java:115( at com.sun.xml.ws.db.DatabindingImpl.(DatabindingImpl.java:118( at com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:74( 在 com.sun.xml.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:58( 在 com.sun.xml.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:120( 在 com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:521( 在 com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:300( 在 com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:164( at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:577( at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560( at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:639( at weblogic.wsee.jaxws.JAXWSDeployedServlet.getEndpoint(JAXWSDeployedServlet.java:355( 在 weblogic.wsee.jaxws.JAXWSServlet.registerEndpoint(JAXWSServlet.java:167( at weblogic.wsee.jaxws.JAXWSServlet.init(JAXWSServlet.java:79( at weblogic.wsee.jaxws.JAXWSDeployedServlet.init(JAXWSDeployedServlet.java:91( at javax.servlet.GenericServlet.init(GenericServlet.java:244(
CAUSE
这是 Eclipselink MOXy 提供程序的已知问题。 忽略了 XmlElementWrapper 注释。此问题在 中报告 错误:16685902 [ https://support.oracle.com/epmos/faces/BugDisplay?parent=DOCUMENT&sourceId=2207272.1&id=16685902 ] - 网络服务参数列表给出 空指针异常在部署。
SOLUTION
将修补程序16685902 [ https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?parent=DOCUMENT&sourceId=2207272.1&patchId=16685902 ] 应用于 WebLogic Server 12.1.1。作为解决方法,请避免 在 WebLogic 中使用 Eclipselink MOXy 提供程序,方法是执行以下操作:
set PRE_CLASSPATH=%WLS%\modules\databinding.override_1.0.0.0.jar
REFERENCES
错误:16685902 [ https://support.oracle.com/epmos/faces/BugDisplay?parent=DOCUMENT&sourceId=2207272.1&id=16685902 ] - WEB 服务参数列表在 部署
这不是提到的错误所必需的。该错误从 12.1.3 开始得到解决
上述解决方法有效(更改 JAXB 提供程序(,但在变量中硬编码是一个糟糕的解决方案PRE_CLASSPATH
(可能仅适用于开发环境(。
Weblogic 自版本 12.1.1 起将默认的 JAXB 提供程序从 Glassfish RI 更改为 Eclipse MOXy,然后您可以再次使用 Glassfish 配置 Java 服务提供程序接口 (SPI(
https://docs.oracle.com/middleware/1213/wls/WSGET/jax-ws-datatypes.htm#WSGET345
这样您就可以看到真正的根本原因。在我们的例子中,这是一个关于重复类的问题(使用 JAXB 创建,具有不同的属性,但相同的包/命名空间(。