AttachmentRequestCallback attachmentRequestCallback = (AttachmentRequestCallback) callbacks[0];
List<Attachment> attachments = new ArrayList<Attachment>();
attachments.add(attachment[0]);
attachmentRequestCallback.setAttachments(attachments);
} else {
AttachmentResultCallback attachmentResultCallback = (AttachmentResultCallback) callbacks[0];
attachment[0] = attachmentResultCallback.getAttachment();
}
}
});
OutboundWSSec wsSecOut = WSSec.getOutboundWSSec(securityProperties);
XMLStreamWriter xmlStreamWriter = wsSecOut.processOutMessage(baos, "UTF-8", new ArrayList<SecurityEvent>());
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(this.getClass().getClassLoader().getResourceAsStream("testdata/plain-soap-1.1.xml"));
XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
xmlStreamWriter.close();
Document securedDoc = documentBuilderFactory.newDocumentBuilder().parse(new ByteArrayInputStream(baos.toByteArray()));
NodeList securityHeaderElement = securedDoc.getElementsByTagNameNS(WSConstants.WSSE_NS, "Security");
Assert.assertEquals(1, securityHeaderElement.getLength());
NodeList childs = securityHeaderElement.item(0).getChildNodes();
Assert.assertEquals(3, childs.getLength());
Assert.assertEquals(childs.item(0).getLocalName(), "EncryptedKey");
Assert.assertEquals(childs.item(1).getLocalName(), "EncryptedData");
Assert.assertEquals(childs.item(2).getLocalName(), "Signature");
Assert.assertEquals(1, attachment[0].getHeaders().size());
}
{
WSSSecurityProperties securityProperties = new WSSSecurityProperties();
securityProperties.loadSignatureVerificationKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
securityProperties.loadDecryptionKeystore(this.getClass().getClassLoader().getResource("receiver.jks"), "default".toCharArray());
securityProperties.setCallbackHandler(new CallbackHandlerImpl());
securityProperties.setAttachmentCallbackHandler(new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
if (callbacks[0] instanceof AttachmentRequestCallback) {
AttachmentRequestCallback attachmentRequestCallback = (AttachmentRequestCallback)callbacks[0];
if (!attachment[0].getId().equals(attachmentRequestCallback.getAttachmentId())) {
throw new RuntimeException("wrong attachment requested");
}
List<Attachment> attachments = new ArrayList<Attachment>();
attachments.add(attachment[0]);
attachmentRequestCallback.setAttachments(attachments);
} else {
AttachmentResultCallback attachmentResultCallback = (AttachmentResultCallback)callbacks[0];
attachment[0] = attachmentResultCallback.getAttachment();
}
}
});
InboundWSSec wsSecIn = WSSec.getInboundWSSec(securityProperties);