private WSDLBoundOperation.ANONYMOUS getResponseRequirement(@Nullable WSDLBoundOperation wbo) {
   try {
     if (af.getResponses() == AddressingFeature.Responses.ANONYMOUS) {
       return WSDLBoundOperation.ANONYMOUS.required;
     } else if (af.getResponses() == AddressingFeature.Responses.NON_ANONYMOUS) {
       return WSDLBoundOperation.ANONYMOUS.prohibited;
     }
   } catch (NoSuchMethodError e) {
     // Ignore error, defaut to optional
   }
   // wsaw wsdl binding case will have some value set on wbo
   return wbo != null ? wbo.getAnonymous() : WSDLBoundOperation.ANONYMOUS.optional;
 }
  @Override
  protected void checkMandatoryHeaders(
      Packet packet,
      boolean foundAction,
      boolean foundTo,
      boolean foundReplyTo,
      boolean foundFaultTo,
      boolean foundMessageId,
      boolean foundRelatesTo) {
    super.checkMandatoryHeaders(
        packet, foundAction, foundTo, foundReplyTo, foundFaultTo, foundMessageId, foundRelatesTo);

    // find Req/Response or Oneway using WSDLModel(if it is availabe)
    WSDLBoundOperation wbo = getWSDLBoundOperation(packet);
    // Taking care of protocol messages as they do not have any corresponding operations
    if (wbo != null) {
      // if two-way and no wsa:MessageID is found
      if (!wbo.getOperation().isOneWay() && !foundMessageId) {
        throw new MissingAddressingHeaderException(addressingVersion.messageIDTag, packet);
      }
    }
  }