конечная точка веб-службы с использованием cxf в предохранителе jboss

Я использую предохранитель jboss 6.1-final:

вот мой простой маршрут:

<route>
    <from uri="cxf:bean:synchronousEndpoint"/>
    <log message="Service invoked." />
    <process ref="simpleProcessor"/>
</route>

и в simpleProcessor я помещаю правильный ответ (т.е. соответствующий объект JAXB) в контекст. Но он отвечает ошибкой:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
       <soap:Fault>
           <faultcode>soap:Server</faultcode>
           <faultstring>Marshalling Error: java.lang.Object cannot be cast to org.w3c.dom.Element</faultstring>
       </soap:Fault>
   </soap:Body>
</soap:Envelope>

вот трассировка стека:

Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to org.w3c.dom.Element

есть какие-нибудь подсказки или предложения?


person Nurlan    schedule 14.05.2014    source источник


Ответы (1)


Трудно сказать, не видя еще немного кода от simpleProcessor. Однако похоже, что вы используете неправильный параметр dataFormat.

Компонент cxf имеет параметр dataFormat, который может быть любым из следующих:

  • POJO: POJO (обычные старые объекты Java) — это параметры Java для метода, вызываемого на целевом сервере. Поддерживаются как протокольные, так и логические обработчики JAX-WS.

  • ПОЛЕЗНАЯ НАГРУЗКА: ПОЛЕЗНАЯ НАГРУЗКА — это полезная нагрузка сообщения (содержимое soap:body) после применения конфигурации сообщения в конечной точке CXF. Поддерживается только обработчик протокола JAX-WS. Логический обработчик JAX-WS не поддерживается.

  • СООБЩЕНИЕ: СООБЩЕНИЕ — это необработанное сообщение, полученное от транспортного уровня. Не предполагается касаться или изменять Stream, некоторые перехватчики CXF будут удалены, если вы используете этот тип DataFormat, поэтому вы не увидите никаких мыльных заголовков после того, как потребитель camel-cxf и обработчик JAX-WS не поддерживаются.

  • CXF_MESSAGE: новое в Camel 2.8.2, CXF_MESSAGE позволяет использовать все возможности перехватчиков CXF путем преобразования сообщения с транспортного уровня в необработанное сообщение SOAP.

По умолчанию используется POJO, что означает, что XML не передается, поскольку сообщение Camel передает объекты. Я подозреваю, что вы пытаетесь манипулировать ответом как XML, и это вызывает проблемы.

Я столкнулся с чем-то похожим на это некоторое время назад, когда пытался преобразовать POJO в XML, пытаясь выполнить запрос XPATH в XML, когда я получал POJO.

person Namphibian    schedule 15.05.2014