Weblogic 12c Веб-сервис NullPointerException

По какой-то причине вызов веб-службы вызывает NullPointerException в моей локальной установке Weblogic 12c. Тот же пакет корректно работает на другом экземпляре Weblogic 12c, поэтому в настройках веб-журнала или параметров запуска сервера /java должно быть что-то не так. Однако я не мог понять, в чем разница, а сообщение журнала сервера вообще не помогает. Конечно, мы используем те же библиотеки JRE и classpath.

Вот исключение

####<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, до того, как элемент управления даже переходит в класс реализации). Могу ли я сделать исключение более подробным? Может быть, это проблема безопасности? Но опять же, ничто в stacktrace не указывает на это. Кроме того, исключений в журнале развертывания нет.

Ответ 1

Надеюсь, что это поможет:

(из MOSC (Сообщество поддержки Oracle) java.lang.NullPointerException: com.sun.xml.ws.spi.db.JAXBWrapperAccessor.getPropertyAccessor при развертывании WebService (Doc ID 2207272.1))

APPLIES TO:

Oracle WebLogic Server - Версия 12.1.1.0 - 12.2.1.2.0 [Release 12c] Информация в этом документе относится к любой платформе.

SYMPTOMS

При попытке развертывания приложения webservice с приведенным ниже пример фрагмента кода,

@WebService
public interface HelloServiceInterface {
@WebMethod
@RequestWrapper(className = "hello.HelloRequest")
public String hello(@WebParam(name = "names") List<String> names);

возникает следующая ошибка:

java.lang.NullPointerException: при 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. (EndpointArgumentsBuilder.java:598) в com.sun.xml.ws.server.sei.TieHandler.createArgumentsBuilder(TieHandler.java:143) на com.sun.xml.ws.server.sei.TieHandler. (TieHandler.java:115) at com.sun.xml.ws.db.DatabindingImpl. (DatabindingImpl.java:118) в 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) на com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:577) в com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:560) at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:639) в weblogic.wsee.jaxws.JAXWSDeployedServlet.getEndpoint(JAXWSDeployedServlet.java:355) в weblogic.wsee.jaxws.JAXWSServlet.registerEndpoint(JAXWSServlet.java:167) в weblogic.wsee.jaxws.JAXWSServlet.init(JAXWSServlet.java:79) в weblogic.wsee.jaxws.JAXWSDeployedServlet.init(JAXWSDeployedServlet.java:91) в 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] - СПИСОК ПАРАМЕТРОВ ВЕБ-САЙТОВ NULLPOINTEREXCEPTION ПРИ РАЗРЕШЕНИИ.

SOLUTION

Применить патч 16685902 [https://support.oracle.com/epmos/faces/ui/patch/PatchDetail.jspx?parent=DOCUMENT&sourceId=2207272.1&patchId=16685902] на WebLogic Server 12.1.1. В качестве обходного пути избегайте используя поставщик Eclipselink MOXy в WebLogic, сделав ниже:

установить 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] - СПИСОК ПАРАМЕТРОВ ВЕБ-САЙТА ДАЕТ НУЛЬПИЛЬНУЮ ЭЛЕМЕНТУ DEPLOYMENT