Удалите ns2 из xmlns: ns2, JAXB, сортировка - PullRequest
0 голосов
/ 12 апреля 2020

Я нашел много постов, в которых говорится об этой проблеме, но пока мне ничего не помогло. Я считаю, что упускаю что-то тривиальное, но я схожу с ума по этому поводу, поэтому, пожалуйста, помогите. Вот фрагменты моего кода:

Класс / узел root:

 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "BulkDataRecord.Type", propOrder = {"transactionRecord"})
 @XmlRootElement(name="bulkDataRecord", namespace =      "http://www.imsglobal.org/services/lis/bdemsv1p0/imsbdemsFileData_v1p0")
 public class BulkDataRecordType {

 @XmlElement(required = true)
 protected List<TransactionRecordType> transactionRecord;
 public List<TransactionRecordType> getTransactionRecord() {
   if (transactionRecord == null) {
     transactionRecord = new ArrayList<TransactionRecordType>();
         }
         return this.transactionRecord;
        }
    }

Я создал класс расширения IpsisNamespaceMapper

public class IpsisNamespaceMapper extends NamespacePrefixMapper {
private static final String BDEMS_PREFIX = ""; // DEFAULT NAMESPACE
private static final String BDEMS_URI = 

"http://www.imsglobal.org/services/lis/bdemsv1p0/imsbdemsFileData_v1p0 ";

@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
    System.out.println("CC    IpsisNamespaceMapper.getPreferredPrefix namespaceUri, suggestion, requirePrefix: " + namespaceUri + "," + suggestion + "," + requirePrefix); 
    if(BDEMS_URI.equals(namespaceUri)) {
        System.out.println("BDEMS_URI : "+BDEMS_URI  +"     BDEMS_PREFIX: " + BDEMS_PREFIX);
        return BDEMS_PREFIX;
    }
    System.out.println("suggestion : " + suggestion);
    return "mappedNamespace2"+suggestion;
}
@Override
public String[] getPreDeclaredNamespaceUris() {
    return new String[] { BDEMS_URI };
}

}

Информация о пакете. java выглядит следующим образом:

       {
     @XmlSchema(namespace = "",
     elementFormDefault = XmlNsForm.UNSET,
     xmlns = @XmlNs(prefix = "", namespaceURI =          "http://www.imsglobal.org/services/lis/bdemsv1p0/imsbdemsFileData_v1p0"))
     package org.ccconline.externalspecs.imsglobal.lis2.bdems;
     import javax.xml.bind.annotation.XmlNs;
     import javax.xml.bind.annotation.XmlNsForm;
     import javax.xml.bind.annotation.XmlSchema;
     }

часть маршалинга выглядит следующим образом:

   JAXBContext context = JAXBContext.newInstance(BulkDataRecordType.class);
            Marshaller marshaller = context.createMarshaller();

            //marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new IpsisNamespaceMapper());
            // Use a special writer class to ... TODO: Finish comments after you've got this thing working.
            // marshaller.marshal(fileData, NoNamespaceXMLWriter.filter(info.getFileHandle()));
            marshaller.marshal(fileData, info.getFileHandle());

Вывод выглядит следующим образом:

   <bulkDataRecord xmlns:ns2="http://www.imsglobal.org/services/lis/bdemsv1p0/imsbdemsFileData_v1p0">
   <transactionRecord>
    <transactionOpIdentifier>replacePerson_20200412111543_1</transactionOpIdentifier>
    <serviceName>pmsv2p0</serviceName>
    <interfaceName>personmanager</interfaceName>

Я пробовал несколько изменений, но я не могу использовать ns2 в xmlns: ns2

Я ценю вашу помощь! ! Спасибо, Джалал!

...