Решение пространств имен с использованием JAXB - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть приведенный ниже xml, в котором повторяются <item> узлы

<rss xmlns:sk="http://example.com/sk" version="2.0">
   <channel>
      <item>
         <guid isPermaLink="false">10833210</guid>
         <url></url>
         <language>ENG</language>
         <countryOfOrigin></countryOfOrigin>
         <sk:programType>Prg1</sk:programType>
         <sk:state>0</sk:state>
        </item>
   </channel>
</rss>

Я разбиваю xml на основе <item> и передаю только <item> в виде строки в демаршаллер JAXB.

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();

JAXBContext jc = JAXBContext.newInstance(Item.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("sky","http://example.com/sk");
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
xr.setContentHandler(unmarshallerHandler);

String xmlProgram = exchange.getIn().getBody(String.class);
StringReader reader = new StringReader(xmlProgram);
InputSource xmlSource = new InputSource(reader);
xr.parse(xmlSource);
Item item = (Item) unmarshallerHandler.getResult();

Элемент Item.java выглядит следующим образом:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "item")
public class Item {
    @XmlElement(name = "guid")
    private String id
    @XmlElement
    private String url;
    @XmlElement
    private String language;
    @XmlElement
    private String countryOfOrigin;
    @XmlElement(name = "sk:programType", namespace = "http://example.com/sk")
    private String programType;
    @XmlElement(name = "sk:state", namespace = "http://example.com/sk")
    private String state;
}

Проблема заключается в том, что после демонтажа узла в Item.java значения programType и state равны нулю.Я также попытался добавить package-info.java.И пространство имен, и информация о пакете не работали для меня.Любые указатели были бы очень полезны ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...