У меня есть служба REST, которая возвращает XML. Он возвращает ответ с элементами пространства имен не по умолчанию, такими как ns:
Я попытался использовать NamespacePrefixMapper и установить следующее свойство, jaxbMarshaller.setProperty ("com.sun.xml.bind.namespacePrefixMapper", новый CustomNamespacePrefixMapper ();
public class CustomNamespacePrefixMapper extends NamespacePrefixMapper {
private static final String DEFAULT_NAMESPACE_PREFIX = "";
private static final String URI_1 = "http://www.w3.org/2001/XMLSchema";
private static final String URI_2 = "http://test.message.upc.com";
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if(StringUtils.isNotEmpty(namespaceUri)) {
if(URI_1.equalsIgnoreCase(namespaceUri) || URI_2.equalsIgnoreCase(namespaceUri)) {
return DEFAULT_NAMESPACE_PREFIX;
}
}
return DEFAULT_NAMESPACE_PREFIX;
}
@Override
public String[] getPreDeclaredNamespaceUris() {
return new String[] { URI_1, URI_2 };
}
}
try {
final JAXBContext jaxbContext = JAXBContext.newInstance(CustomerDetails.class);
final Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// To format XML
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new CustomNamespacePrefixMapper());
// If you DO NOT have JAXB annotated class
final JAXBElement<CustomerDetailsResponse> jaxbElement = new JAXBElement<CustomerDetailsResponse>(
new QName("", "CustomerDetailsResponse"), CustomerDetailsResponse.class, customerDetailsResponse);
final StringWriter stringWriter = new StringWriter();
jaxbMarshaller.marshal(jaxbElement, stringWriter);
getTVStreamingEntitlementsV2ResponseVO = buildResponseWithStatusCode(Response.Status.OK.getStatusCode(),
stringWriter.toString());
} catch (final JAXBException jaxbException) {
}
Я ожидаю ответа без каких-либо пространств имен в XML