2015-06-29 2 views
0

У меня есть вариант использования, когда в некоторых случаях (в зависимости от бизнес-логики) мы не хотим отображать некоторые элементы XML. Поэтому я не могу использовать @XmlTransient (я думаю).Как программно скрыть XML в java (JAXB)

Я бы хотел сделать что-то подобное.

private void HideSome() { 
// some code to hide a specific element 

} 
+1

Можете ли вы дать более подробную информацию? Например, код, который вы пробовали, какие результаты вы столкнулись до сих пор. На данный момент это общий неопределенный вопрос. –

ответ

2

Вы должны определить элемент не требуется в аннотации и соответствующий XSD как дополнительный (MinOccurs = 0 MaxOccurs = 1).

Если вы не хотите его визуализировать, установите его равным null, прежде чем передавать его маршаллеру.

XSD

<complexType name="MyElementType"> 
    <sequence> 
    <element name="ID" type="string" /> 
    <element name="MaybeHere" type="string" minOccurs="0" maxOccurs="1" /> 
    </sequence> 
</complexType> 
<element name="MyElement" type="MyElementType" /> 

ява

@XmlRootElement(name="MyElement") 
public class MyElement { 
    private String id; 
    private String maybeHere; 

    @XmlElement(name="ID") 
    public String getId() {return id;} 
    public void setId(String s){this.id = s;} 

    @XmlElement(name="MaybeHere", required=false) 
    public String getMaybeHere() {return maybeHere;} 
    public void setMaybeHere(String s) { this.maybeHere = s;} 
} 

сортировочных

/* in some code */ 
if(businessCondition){ 
    myElem.maybeHere = null; 

} 
marshaller.marshal(myElem); 
+0

Спасибо, это было очень подробно, и я ценю это. Он разбился по следующему сценарию: BigDecimal foo был инициализирован до 0.00. Тогда в зависимости от бизнес-логики мы не собирались его использовать - установите для него значение null. Преобразовать в JSON, отлично работает, значение не задано. Затем преобразуйте в XML с помощью этого кода: MyObj object = gson.fromJson (jsonstr, MyObj.class); - Я думаю, что это повторно инициализирует его, так что нулевые значения заполняются 0. Таким образом, обходной путь не инициализируется 0.00, init - null. – Rob

+0

Рад, что это сработало для вас. Если значение считается необязательным, я бы только инициализировал его, когда это необходимо. –

+0

Оглядываясь назад, я понял, что мы делали ненужное преобразование из объекта -> json -> xml. Таким образом, это помогло сократить время обработки. Благодаря! – Rob

Смежные вопросы