Управление журналом в cxf + весенняя загрузка - PullRequest
0 голосов
/ 17 октября 2018

У меня Spring boot server, и он работает как proxy.Это SOAP service и SOAP client.пользователь вызывает сервис мыла на моем сервере, а мой сервер вызывает другой сервис мыла.Услуги рта используют один WSDL.Мой сервер реализует это WSDL и действует как сервер для клиентов.И мой сервер использует это WSDL для запросов к другому серверу и действует как клиент для другого сервера.

Client -> WSDL -> My server -> WSDL -> Another server
           |                     |  
           |------same WSDL------|

Мне нужно управлять журналами SOAP, но у меня есть проблемы.Например, я могу добавить в журнал следующие строки:

  <logger name="org.apache.cxf.services.MessageExchangePortType.REQ_IN" level="ERROR" />
  <logger name="org.apache.cxf.services.MessageExchangePortType.RESP_IN" level="ERROR" />

  <logger name="org.apache.cxf.services.MessageExchangePortType.REQ_OUT" level="INFO" />
  <logger name="org.apache.cxf.services.MessageExchangePortType.RESP_OUT" level="INFO" /> 

Но таким образом я управляю журналами как для входящих, так и для исходящих сообщений.

Поскольку моя служба и клиент используют MessageExchangePortType.

Как я могу управлять журналами каждого клиента / сервера?

Это реализация client :

    @Bean(name = "MessageExchangeClient")
    public MessageExchangePortType signingPortType() {
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setServiceClass(MessageExchangePortType.class);
        jaxWsProxyFactoryBean.setAddress(host);
        jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
        jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
        jaxWsProxyFactoryBean.getOutInterceptors().add(new FaultOutInterceptor());
        jaxWsProxyFactoryBean.getOutInterceptors().add(new FaultOutInterceptor());
        return (MessageExchangePortType) jaxWsProxyFactoryBean.create();
    }

Это реализацияиз server :

Component
@Slf4j
@SchemaValidation(type = SchemaValidation.SchemaValidationType.IN)
public class MyEndpoint implements MessageExchangePortType {

и в конфигурации:

@Configuration
public class WebServiceConfiguration {

    @Value("${server.path}")
    private String path;

    private final Bus bus;
    private final MyEndpoint myEndpoint;

    @Autowired
    public WebServiceConfiguration(Bus bus, MyEndpoint myEndpoint) {
        this.bus = bus;
        this.myEndpoint= myEndpoint;
    }

    @Bean
    Endpoint endpoint() {

        EndpointImpl endpoint = new EndpointImpl(bus, myEndpoint);

        endpoint.getInInterceptors().add(new SAAJInInterceptor());

        LoggingFeature loggingFeature = new LoggingFeature();
        loggingFeature.setVerbose(true);
        loggingFeature.setLogMultipart(true);
        loggingFeature.setPrettyLogging(true);
        endpoint.getFeatures().add(loggingFeature);

        endpoint.publish(path);

        return endpoint;
    }
}

Я хочу, например, отключить REQ_IN журналы на клиенте и включить на сервере, но если я пишу: <logger name="org.apache.cxf.services.MessageExchangePortType.REQ_IN" level="ERROR" />

Я установил уровень ОШИБКИ для клиента и для сервера, потому что MessageExchangePortType использует клиента и сервер.

1 Ответ

0 голосов
/ 19 октября 2018

Реализуйте свой собственный тип org.apache.cxf.ext.logging.event.LogEventSender и измените категории.Посмотрите на org.apache.cxf.ext.logging.slf4j.Slf4jEventSender для реализации, которую вы используете по умолчанию, чтобы получить представление о том, как реализовать это.

...