public final Packet createRequestPacket(Packet originalRequestPacket, Object jaxbElement, String wsaAction, boolean expectReply) {
if (originalRequestPacket != null) { // server side request transferred as a response
Packet request = createResponsePacket(originalRequestPacket, jaxbElement, wsaAction, false);
final MessageHeaders requestHeaders = request.getMessage().getHeaders();
if (expectReply) { // attach wsa:ReplyTo header from the original request
final String endpointAddress = AddressingUtils.getTo(originalRequestPacket.getMessage().getHeaders(), addressingVersion, soapVersion);
requestHeaders.add(createReplyToHeader(endpointAddress));
}
requestHeaders.remove(addressingVersion.relatesToTag);
return request;
} else {
Message message = Messages.create(jaxbContext, jaxbElement, soapVersion);
return createRequestPacket(message, wsaAction, expectReply);