// wsa:Action, add if the message doesn't already contain it,
// generally true for SEI case where there is SEIModel or WSDLModel
// false for Provider with no wsdl, Expects User to set the coresponding header on the Message.
if (AddressingUtils.getAction(responsePacket.getMessage().getHeaders(), av, sv) == null) {
//wsa:Action header is not set in the message, so use the wsa:Action passed as the parameter.
hl.add(new StringHeader(av.actionTag, action, sv, mustUnderstand));
}
// wsa:MessageID
if (responsePacket.getMessage().getHeaders().get(av.messageIDTag, false) == null) {
// if header doesn't exist, method getID creates a new random id
String newID = Message.generateMessageID();
hl.add(new StringHeader(av.messageIDTag, newID));
}
// wsa:RelatesTo
String mid = null;
if (wpb != null) {
mid = wpb.getMessageID();
}
if (mid == null) {
mid = AddressingUtils.getMessageID(msg.getHeaders(), av, sv);
}
if (mid != null) {
hl.addOrReplace(new RelatesToHeader(av.relatesToTag, mid));
}
// populate reference parameters
WSEndpointReference refpEPR = null;
if (responsePacket.getMessage().isFault()) {
// choose FaultTo
if (wpb != null) {
refpEPR = wpb.getFaultToFromRequest();
}
if (refpEPR == null) {
refpEPR = AddressingUtils.getFaultTo(msg.getHeaders(), av, sv);
}
// if FaultTo is null, then use ReplyTo
if (refpEPR == null) {
refpEPR = replyTo;
}
} else {
// choose ReplyTo
refpEPR = replyTo;
}
if (replaceToTag && refpEPR != null) {
hl.addOrReplace(new StringHeader(av.toTag, refpEPR.getAddress()));
refpEPR.addReferenceParametersToList(hl);
}
}