Невозможно удалить пространство имен из XML с помощью Java - PullRequest
0 голосов
/ 04 октября 2019

У меня есть служба 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

...