Обработчик не должен напрямую реализовывать интерфейс javax.xml.ws.handler.Handler.

До этого я использовал SOAPHandler< SOAPMessageContext > для обработки данных из веб-сервиса. Код выглядит следующим образом:

public class MyBillSoapMessageHandler implements
    SOAPHandler< SOAPMessageContext >  {

    @Override
    public boolean handleMessage(SOAPMessageContext context) {

       // This following line something will hit out of memory
       SOAPMessage message = context.getMessage( );

       // some other code continue...
    }
}

Я попробовал погуглить и прочитал что-то по этой ссылке: JAX-WS SoapHandler с большими сообщениями : OutOfMemoryError

Насколько я понимаю, пользователь MessageHandlerContext лучше, чем SOAPMessageContext, поэтому я пытаюсь изменить его, чтобы он стал:

public class MyBillSoapMessageHandler implements
    MessageHandler< MessageHandlerContext >  {

    @Override
    public boolean handleMessage(MessageHandlerContext context) {

       //... code here ...//
    }
}

Однако, когда я запускаю его, я нажимаю:

Причина: javax.xml.ws.soap.SOAPFaultException: обработчик com.mybill.ws.camel.MyBillSoapMessageHandler не должен напрямую реализовывать интерфейс javax.xml.ws.handler.Handler.

Я не уверен, почему я получаю эту ошибку. Есть ли причина, по которой это происходит из-за того, что мой сервер не использует MessageHandlerContext?

Добрый совет.


person Panadol Chong    schedule 28.03.2018    source источник


Ответы (1)


Мне удается исправить это с помощью средства доступа к сообщениям.

Мой пример кода выглядит следующим образом:

Object accessor = context.get("jaxws.message.accessor");

if (accessor != null) {
                baosInString = accessor.toString();
                }

Основывайтесь на рекомендациях с веб-сайта IBM. http://www-01.ibm.com/support/docview.wss?uid=swg1PM21151

person Panadol Chong    schedule 29.03.2018