У меня 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
использует клиента и сервер.