in rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java [1789:1840]
private static boolean compareCompositeSubtypes(MediaType requiredType, MediaType userType,
Message message) {
boolean isCompatible = false;
// check if we have composite subtypes
String subType1 = requiredType.getSubtype();
String subType2 = userType.getSubtype();
String subTypeAfterPlus1 = splitMediaSubType(subType1, true);
String subTypeAfterPlus2 = splitMediaSubType(subType2, true);
if (message != null && MessageUtils.getContextualBoolean(message, PARTIAL_HIERARCHICAL_MEDIA_SUBTYPE_CHECK)) {
if (subTypeAfterPlus1 != null || subTypeAfterPlus2 != null) {
boolean nullPossible = subTypeAfterPlus1 == null || subTypeAfterPlus2 == null;
isCompatible = subTypeAfterPlus1 == null && subTypeAfterPlus2.equals(subType1)
|| subTypeAfterPlus2 == null && subTypeAfterPlus1.equals(subType2);
if (!isCompatible && !nullPossible) {
isCompatible = subTypeAfterPlus1.equalsIgnoreCase(subTypeAfterPlus2)
&& (subType1.charAt(0) == '*' || subType2.charAt(0) == '*');
}
if (!isCompatible) {
String subTypeBeforePlus1 = splitMediaSubType(subType1, false);
String subTypeBeforePlus2 = splitMediaSubType(subType2, false);
nullPossible = subTypeBeforePlus1 == null || subTypeBeforePlus2 == null;
isCompatible = subTypeBeforePlus1 == null && subTypeBeforePlus2 != null
&& subTypeBeforePlus2.equals(subType1)
|| subTypeBeforePlus2 == null && subTypeBeforePlus1 != null
&& subTypeBeforePlus1.equals(subType2);
if (!isCompatible && !nullPossible) {
isCompatible = subTypeBeforePlus1.equalsIgnoreCase(subTypeBeforePlus2)
&& (subType1.charAt(subType1.length() - 1) == '*'
|| subType2.charAt(subType2.length() - 1) == '*');
}
}
}
} else {
if (subTypeAfterPlus1 != null && subTypeAfterPlus2 != null) {
isCompatible = subTypeAfterPlus1.equalsIgnoreCase(subTypeAfterPlus2)
&& (subType1.charAt(0) == '*' || subType2.charAt(0) == '*');
if (!isCompatible) {
String subTypeBeforePlus1 = splitMediaSubType(subType1, false);
String subTypeBeforePlus2 = splitMediaSubType(subType2, false);
isCompatible = subTypeBeforePlus1 != null && subTypeBeforePlus1.equalsIgnoreCase(subTypeBeforePlus2)
&& (subType1.charAt(subType1.length() - 1) == '*'
|| subType2.charAt(subType2.length() - 1) == '*');
}
}
}
return isCompatible;
}