2016-11-01 10 views
1

Я использую Spring Jaxb2Marshaller для преобразования объектов Java в XML и наоборот. Мне нужно установить динамические значения для xmlnsprefix и value - значит, рассматривая примерСгенерируйте префикс динамического пространства имен с помощью Spring Jaxb2Marshaller

xmlns:abc="http://www.example.com" 

где prefix, как abc и value в http://www.example.com должна быть настраиваемой (поставка из файла свойств).

Смотрите пример XML класса Product под пакетом com.test.abc

<abc:Product 
    xmlns:abc="http://www.example.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <abc:productId>252</abc:productId> 
    <abc:productName>XYZ</abc:productName> 
</abc:Product> 

Чтобы построить этот XML, я использую следующие конфигурации

Spring Jaxb2Marshaller Bean конфигурации

@Bean 
public Jaxb2Marshaller getJaxb2Marshaller(){ 
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
    marshaller.setPackagesToScan("com.test.abc", "com.test.xyz"); 
    Map<String,Object> propertiesMap = new HashMap<String,Object>(); 
    propertiesMap.put("jaxb.formatted.output", true); 
    marshaller.setMarshallerProperties(propertiesMap); 
    return marshaller; 
} 

pack-info.java

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.example.com", 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, 
    xmlns = { @javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.example.com", prefix="abc")}) 
package com.test.abc; 

Вот я жестко закодированные XMLNS префикс и значение. Мне нужно предоставить префикс xmlns и значение из файла свойств. Как я могу это достичь?

Я использую SpringBoot 1.3.3

ответ

0

С аннотациями это difficult!

Единственных (и IDE-недружественный) способами я могу думать:

  • использовать «замену коды» (как часть вашего жизненного цикла сборки ... фильтрацию значения в аннотациях заполнителей)
  • ... или использовать некоторые (предварительные компиляции !?) «Инструмент аннотации» (как предлагается в одном из answers).

A (пользовательский) NamespacePrefixMapper с другой стороны, очистит все эти аннотации на основе ограничений/проблем и позволяют гораздо лучше обработки (выполнения/весна) свойств.

A simple и пример spring based.

Желаю успеха!