Camel CXF: односторонним сценарием является доступ к основному пользователю, что приводит к исключению нулевого указателя

Обнаружена эта проблема с профилем Websphere Liberty 17.0.0.4. Когда я делаю односторонний запрос, это приводит к нулевому указателю. Он отлично работает с сервисами запрос-ответ.

Мое приложение для весенней загрузки. Код отлично работает как отдельное приложение Springboot, работающее со встроенным контейнером tomcat.

Ошибка возникает при запуске внутри профиля свободы Websphere. Я отключил встроенный контейнер при развертывании в WLP

 java.lang.NullPointerException: null
    at com.ibm.ws.webcontainer.osgi.collaborator.CollaboratorHelperImpl.getCurrentSecurityCollaborator(CollaboratorHelperImpl.java:286) ~[na:na]
    at com.ibm.ws.webcontainer.srt.SRTServletRequest.getUserPrincipal(SRTServletRequest.java:2796) ~[na:na]
    at org.apache.cxf.transport.http.AbstractHTTPDestination$2.getUserPrincipal(AbstractHTTPDestination.java:392) ~[cxf-rt-transports-http-3.2.1.jar:3.2.1]
    at org.apache.camel.component.cxf.DefaultCxfBinding.populateExchangeFromCxfRequest(DefaultCxfBinding.java:274) ~[camel-cxf-2.20.1.jar:2.20.1]
    at org.apache.camel.component.cxf.CxfConsumer$CxfConsumerInvoker.prepareCamelExchange(CxfConsumer.java:316) ~[camel-cxf-2.20.1.jar:2.20.1]
    at org.apache.camel.component.cxf.CxfConsumer$CxfConsumerInvoker.syncInvoke(CxfConsumer.java:253) ~[camel-cxf-2.20.1.jar:2.20.1]
    at org.apache.camel.component.cxf.CxfConsumer$CxfConsumerInvoker.invoke(CxfConsumer.java:183) ~[camel-cxf-2.20.1.jar:2.20.1]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) ~[cxf-core-3.2.1.jar:3.2.1]

person pointerness    schedule 27.12.2017    source источник


Ответы (1)


Я решил это, переопределив DefaultCxfBinding. На данный момент я отключил создание securityContext. CFX JMSConfig имеет возможность сделать это, задав для createSecurityContext значение false. Даже транспорт HTTP должен иметь эту функцию.

@Override public void populateExchangeFromCxfRequest(Exchange cxfExchange, org.apache.camel.Exchange camelExchange) {

Message cxfMessage = cxfExchange.getInMessage();    
cxfMessage.put(SecurityContext.class, null);        
super.populateExchangeFromCxfRequest(cxfExchange, camelExchange);

}

person pointerness    schedule 28.12.2017