/** * Constructor. */ public AuditOutRequestInterceptor( AuditStrategy<T> auditStrategy, AuditContext auditContext, AsynchronyCorrelator<T> correlator, WsTransactionConfiguration<T> wsTransactionConfiguration) { super(Phase.PRE_PROTOCOL_ENDING, auditStrategy, auditContext); addAfter(OutPayloadExtractorInterceptor.class.getName()); this.correlator = correlator; this.wsTransactionConfiguration = wsTransactionConfiguration; }
@Override protected void process(SoapMessage message) { if (isGET(message)) { return; } T auditDataset = getAuditDataset(message); auditDataset.setRemoteAddress((String) message.get(Message.ENDPOINT_ADDRESS)); auditDataset.setDestinationUserId((String) message.get(Message.ENDPOINT_ADDRESS)); enrichAuditDatasetFromXuaToken(message, Header.Direction.DIRECTION_OUT, auditDataset); Object request = extractPojo(message); // Get request payload, handle different variants thereby: // a) for HL7v3-based transactions, payload corresponds to the "main" message; // b) for ebXML-based transactions, rely on the {@link OutPayloadExtractorInterceptor}. if (wsTransactionConfiguration.isAuditRequestPayload()) { if (request instanceof String) { auditDataset.setRequestPayload((String) request); } else { auditDataset.setRequestPayload(message.getContent(StringPayloadHolder.class)); } } getAuditStrategy().enrichAuditDatasetFromRequest(auditDataset, request, message); // when the invocation is asynchronous: store audit dataset into the correlator AddressingProperties props = (AddressingProperties) message.get(JAXWSAConstants.ADDRESSING_PROPERTIES_OUTBOUND); if (props != null && (Boolean.TRUE.equals(message.getContextualProperty(AsynchronyCorrelator.FORCE_CORRELATION)) || ! Names.WSA_ANONYMOUS_ADDRESS.equals(props.getReplyTo().getAddress().getValue()))) { correlator.storeAuditDataset(props.getMessageID().getValue(), auditDataset); } }
@Override protected void configureInterceptors(Client client) { super.configureInterceptors(client); // install auditing-related interceptors if the user has not switched auditing off if (auditStrategy != null) { if (wsTransactionConfiguration.isAuditRequestPayload()) { installPayloadInterceptors(client); } client.getOutInterceptors().add(new AuditOutRequestInterceptor<>( auditStrategy, auditContext, correlator, getWsTransactionConfiguration())); AuditResponseInterceptor<AuditDatasetType> auditInterceptor = new AuditResponseInterceptor<>(auditStrategy, auditContext, false, correlator, false); client.getInInterceptors().add(auditInterceptor); client.getInFaultInterceptors().add(auditInterceptor); } } }