Возможно ли зарегистрировать запрос/ответ как XML с использованием CXF, в идеале, в отдельный файл, чтобы я мог контролировать, что делает приложение?Запрос/ответ на регистрацию с Apache CXF как XML
ответ
Добавьте следующее конечных точек и клиентов:
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
Это будет регистрировать все в журнал сервера.
Если вы хотите зарегистрировать их в другом месте, ознакомьтесь с исходным кодом встроенного CXF LoggingInInterceptor и LoggingOutInterceptor. Вы можете следовать шаблону, который они используют, чтобы захватить сообщения в пути/выходе и делать с ними то, что вам нравится.
Добавить свои собственные перехватчики в цепи с чем-то вроде этого:
<jaxws:inInterceptors>
<ref bean="myLoggingInInterceptor" />
</jaxws:inInterceptors>
Итак, я попытался немного больше с этим. Для получения запроса XML и ответы протоколируются, и если вы используете Log4J, вам необходимо установить логарифмически уровень CXF в log4j.xml файл, как это (> = INFO):
<logger name="org.apache.cxf" >
<level value="INFO" />
</logger>
И cxf.xml файл должен содержать следующее:
<cxf:bus>
<cxf:features>
<cxf:logging/>
</cxf:features>
</cxf:bus>
Оба файла должен быть в CLASSPATH.
Чтобы отобразить сообщение мыло добавить это в ваш код:
Client client = ClientProxy.getClient(service);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
Существует несколько основных способов ведения журнала CXF. Это способ конфигурации log4j ... тот, что указан выше, является файлом конфигурации файла jaxws –
Запрос мыло XML может быть легко регистрируется с помощью обычая В перехватчика. Скажем, у нас есть перехватчик под названием «wsLoggingInInterceptor», поэтому в файле контекста будет иметь следующий вид:
<bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="logOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<bean id="wsLoggingInInterceptor" class="org.jinouts.webservice.logging.WSLoggingInInterceptor"/>
<cxf:bus>
<cxf:inInterceptors>
<ref bean="loggingInInterceptor"/>
<ref bean="wsLoggingInInterceptor"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="logOutInterceptor"/>
</cxf:outInterceptors>
</cxf:bus>
В классе мы можем получить запрос XML следующим образом:
public class WSLoggingInInterceptor extends AbstractSoapInterceptor
{
public WSLoggingInInterceptor()
{
super(Phase.RECEIVE);
}
@Override
public void handleMessage (SoapMessage message) throws Fault
{
//get the remote address
HttpServletRequest httpRequest = (HttpServletRequest) message.get (AbstractHTTPDestination.HTTP_REQUEST);
System.out.println ("Request From the address : " + httpRequest.getRemoteAddr ());
try
{
// now get the request xml
InputStream is = message.getContent (InputStream.class);
CachedOutputStream os = new CachedOutputStream ();
IOUtils.copy (is, os);
os.flush ();
message.setContent ( InputStream.class, os.getInputStream ());
is.close ();
System.out.println ("The request is: " + IOUtils.toString (os.getInputStream ()));
os.close ();
}
catch (Exception ex)
{
ex.printStackTrace ();
}
}
}
Look , здесь я также регистрирую адрес, откуда идет запрос. Вы также можете получить дополнительную информацию из объекта «HttpServletRequest». вы можете иметь больше от: http://cxf.apache.org/docs/interceptors.html
Для входа ответа XML вы можете посмотреть на this thread
Это гораздо проще, чтобы добавить свой собственный журнал для свойств конечной точки. В этом случае перехватчик регистрации по умолчанию будет искать ваш логгер в свойствах конечных точек, и если он найдет его, он будет использовать его, иначе он будет создавать по умолчанию.Вот мой пример использования:
<jaxws:endpoint
xmlns:client="http://service.info.client.diasoft.services.stream.integration.cib.sberbank.ru"
address="/diasoft/clientInfoWS"
serviceName="client:ClientWS"
implementor="#clientServiceImpl">
<jaxws:properties>
<entry key="MessageLogger" value-ref="logger"/>
</jaxws:properties>
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
</jaxws:endpoint>
<bean id="logger" class="org.apache.cxf.common.logging.LogUtils" factory-method="getLogger">
<constructor-arg value="ru.sberbank.cib.integration.stream.services.diasoft.client.info.service.ClientWSImpl"/>
</bean>
Если вы используете Spring с подмигнули Java-конфигурации, есть 2 простых способов активации Ведение журнала SOAP-сообщения с Apache CXF:
Непосредственно на SpringBus - это полезно, если вы хотите, чтобы регистрировать сообщения о всех ваших CxF-Endpoints:
@Bean(name=Bus.DEFAULT_BUS_ID) public SpringBus springBus() { SpringBus springBus = new SpringBus(); LoggingFeature logFeature = new LoggingFeature(); logFeature.setPrettyLogging(true); logFeature.initialize(springBus); springBus.getFeatures().add(logFeature); return springBus; }
Включение журналирования отдельно в преддверии Ry воздействию CXF конечных точек
@Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), weatherService()); endpoint.publish(SERVICE_NAME_URL_PATH); endpoint.setWsdlLocation("Weather1.0.wsdl"); LoggingFeature logFeature = new LoggingFeature(); logFeature.setPrettyLogging(true); logFeature.initialize(springBus()); endpoint.getFeatures().add(logFeature); return endpoint; }
напомнить LoggingFeature.setPrettyLogging (истина); Метод просмотра довольно печатных SOAP-сообщений и LoggingFeature.initialize (springBus()); - без последней магии не бывает. Для более чистого кода вы также можете отделить LoggingFeature как отдельный Bean и ввести его либо в свой SpringBus, либо в Endpoint-Bean.
- 1. GWT с Apache CXF
- 2. Как ссылаться на библиотеку apache cxf с веб-сервера apache
- 3. Регистрация файла Apache cxf
- 4. Apache CXF и tomcat
- 5. Запуск Apache-CXF на WebSphere
- 6. Apache CXF с конфигурацией пружины
- 7. Проблема Apache CXF на Glassfish
- 8. Конфигурация Apache CXF
- 9. Клиентская память Apache CXF
- 10. Apache cxf jax-rs реализация с xml databind
- 11. Apache CXF: Сообщение истекло
- 12. Ошибка клиента Apache CXF
- 13. WS-Security с Apache CXF
- 14. Как работает генерация классов с Apache CXF?
- 15. Apache CXF Request/Response
- 16. Веб-сервис RESTful с apache cxf
- 17. Apache CXF JMS - SOAP
- 18. GWT-APACHE CXF header
- 19. Установите Apache cxf в karaf
- 20. Apache CXF базовая аутентификация
- 21. Решение Apache CXF WSDL
- 22. WSDL Apache CXF Issue
- 23. WebService с Apache CXF и пользовательские заголовки
- 24. Hyperjaxb и Apache CXF
- 25. apache camel и cxf
- 26. Apache CXF Rest Client Clarity
- 27. Apache Camel CXF
- 28. WS-Security UsernameToken с Apache CXF
- 29. Услуги публикации Apache Cxf
- 30. Apache CXF ExceptionMapper с запросом сообщения
Будет ли это не просто выгружать контент, неформатированный, то есть не как XML? – irishguy
Он покажет XML в журнале сервера. – BPS
Более подробную функцию ведения журнала можно найти в https://github.com/greenbird/xml-formatter-components/tree/master/cxf – ThomasRS