2012-04-24 3 views
2

Я использую JAXB для создания модели bean-компонента из XML-схемы. Одна из конструкций в схеме состоит в том, что может присутствовать определенный тег или нет. Например, пинг в следующей sniplet:JAXB установил значение для тега без содержимого

<buildtime-behavior> 
     <ping/> 
    </buildtime-behavior> 

В XSD я сопоставляются это как:

<xs:element name="buildtime-behavior"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="ping" minOccurs="0" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

И в побочном JAXB генерируется класс BuildtimeBehavior это приводит:

public void setPing(Object value) 

Теперь я хочу установить или очистить этот тег. Однако я не могу просто сделать «новый объект()», потому что это приведет к тому, что «java.lang.Object не может быть передан в org.w3c.dom.Element». Но у меня нет документа для создания элемента. У JAXB, сгенерированного ObjectFactory, нет метода createPing() ...

Как настроить пинг?

+0

Это может ответить на ваш вопрос: http://stackoverflow.com/questions/594537/how-to-instantiate-an-empty-element-with-jaxb –

ответ

0

Вы можете создать ping элемент следующим образом:

package forum10294935; 

import javax.xml.parsers.*; 
import org.w3c.dom.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document document = db.newDocument(); 
     Element pingElement = document.createElement("ping"); 
    } 

} 

В Вашем вопросе Вы сказали, что вы создали модель из схемы XML. Если вы можете изменить свою модель или начать с классов Java, ниже приведена ссылка на подход, который вы можете попробовать использовать XmlAdapter.

+0

Альтернативой является проанализируйте XML с помощью набора ping и получите значение от получателя. \t \t \t \t \t Объект lPing = lJAXBWithPingSet.getBuildtimeBehavior(). GetPing(); \t \t \t \t \t \t lMyJAXB.getBuildtimeBehavior(). SetPing (lPing); – tbeernot

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